2014-06-16 4 views
0

내 스토리 보드에는 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

Delegate in Swift-language

:

또한 나는 비슷한 질문을 발견

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) { 
     secondOperationViewController = segue!.destinationViewController as? CalculatorViewController 
     secondOperationViewController!.delegate = self; 
    } 

그것은 작동하지만, 내 대리자 메서드는, 3 ViewControllers에서 호출 연결되고있다 초기 ViewController, 그래서 다른 솔루션이 필요합니다.

그럼 지정된 식별자로 ViewController에서 대리자 메소드를 정확히 호출 할 수 있습니까? 어떤 아이디어?


그래서, 임베드 SEGUE는 "instantiateViewControllerWithIdentifier"작동하지 않습니다 (그러나 모달 발표 SEGUE와 함께 작동). 나는 이유를 모른다. 당신이 대리자를 설정하기 전에이 방법을, 당신이에 대한 당신의 prepareForSegue 검사에서 다음

enter image description here

:

override func viewDidLoad() { 
    super.viewDidLoad() 
    let secondOperationViewController:CalculatorViewController = childViewControllers[0] as CalculatorViewController 
    secondOperationViewController.delegate = self 
} 

답변

0

스토리 보드에서 당신의 SEGUE 고유 식별자를 제공 : 여기에 임베드 SEGUE에 대한 솔루션입니다 이 위임을 설정할시기를 정확히 알고 있어야합니다.

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) { 
    // Checking to make sure this is the correct segue. This is also protection for the "as?" 
    if segue?.identifier == "SecondOVCSeuge" { 
     secondOperationViewController = segue!.destinationViewController as? CalculatorViewController 
     secondOperationViewController!.delegate = self; 
    }  
} 
+0

흠. 연결된 ViewController에서 작동해야합니다. 하지만 Seogue가없는 ViewController는 무엇입니까? 나는 대리자 메서드를 사용하여 SecondOperationViewController (ContainerViewController에서 포함 된 segue 포함), firstOperationViewController 및 thirdOperationViewController (segue없이) 사이를 전환하려고합니다. –

+1

@ Kenarius1이 경우'ViewController'의'identifier'를 검사 할 수 있습니다. 'secondOperationViewController.identifier == "secondOperationViewController"'(첫 번째 예제에 따라). – Firo

+0

하지만 Segue없이 ViewController를 어떻게 인스턴스화 할 수 있습니까? 프로그래밍 방식으로 segue를 만들어야합니까? Objective-C에서는 'self.firstOperationViewController = [self.storyboard instantiateViewControllerWithIdentifier : @ "firstOperationViewController"]'를 사용했지만 Swift에서 대리자와 작동하지 않는 것으로 보입니다. –

관련 문제