내 스토리 보드에는 CalculatorViewController 인스턴스가 5 개 있지만 식별자는 "secondOperationViewController"로되어 있습니다. 그 중 3 개는 embed segues를 사용하여 ContainerViewController라는 이름의 초기 ViewController와 연결되었습니다.대리인이 호출되지 않음 (instantiateViewControllerWithIdentifier)
식별자가 "secondOperationViewController"인 ViewController를 사용하여 ContainerViewController에서 메서드를 호출 할 수 있지만이를 올바르게 인스턴스화 할 수 없으므로 메서드가 호출되지 않습니다. 여기 내 코드의 일부입니다 :
override func viewDidLoad() {
super.viewDidLoad()
secondOperationViewController = storyboard.instantiateViewControllerWithIdentifier("secondOperationViewController") as? CalculatorViewController
secondOperationViewController!.delegate = self
println(secondOperationViewController)
}
무엇이 잘못 되었습니까? 나는 내 CalculatorViewController의 instantion를 rewrited
:
또한 나는 비슷한 질문을 발견override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
secondOperationViewController = segue!.destinationViewController as? CalculatorViewController
secondOperationViewController!.delegate = self;
}
그것은 작동하지만, 내 대리자 메서드는, 3 ViewControllers에서 호출 연결되고있다 초기 ViewController, 그래서 다른 솔루션이 필요합니다.
그럼 지정된 식별자로 ViewController에서 대리자 메소드를 정확히 호출 할 수 있습니까? 어떤 아이디어?
그래서, 임베드 SEGUE는 "instantiateViewControllerWithIdentifier"작동하지 않습니다 (그러나 모달 발표 SEGUE와 함께 작동). 나는 이유를 모른다. 당신이 대리자를 설정하기 전에이 방법을, 당신이에 대한 당신의 prepareForSegue
검사에서 다음
:
override func viewDidLoad() {
super.viewDidLoad()
let secondOperationViewController:CalculatorViewController = childViewControllers[0] as CalculatorViewController
secondOperationViewController.delegate = self
}
흠. 연결된 ViewController에서 작동해야합니다. 하지만 Seogue가없는 ViewController는 무엇입니까? 나는 대리자 메서드를 사용하여 SecondOperationViewController (ContainerViewController에서 포함 된 segue 포함), firstOperationViewController 및 thirdOperationViewController (segue없이) 사이를 전환하려고합니다. –
@ Kenarius1이 경우'ViewController'의'identifier'를 검사 할 수 있습니다. 'secondOperationViewController.identifier == "secondOperationViewController"'(첫 번째 예제에 따라). – Firo
하지만 Segue없이 ViewController를 어떻게 인스턴스화 할 수 있습니까? 프로그래밍 방식으로 segue를 만들어야합니까? Objective-C에서는 'self.firstOperationViewController = [self.storyboard instantiateViewControllerWithIdentifier : @ "firstOperationViewController"]'를 사용했지만 Swift에서 대리자와 작동하지 않는 것으로 보입니다. –