2013-08-19 2 views

답변

19

당신은 UINavigationControllerDelegate 프로토콜을 사용하고 정의 할 수 있습니다 그래서 당신은 대상 컨트롤러의 방법을 쓸 수 있으며, 여기에 전화 도시 된 바와 같이, 단락의 완료에 대한 정보를 얻기 위해 위임자. segues를 추적하기위한 또 다른 논리적 인 장소는 AppDelegate 일 수 있습니다. 뷰 컨트롤러에서 그 일의

(줄여서 VC) :

class MyViewControllerSubclass : UIViewController, UINavigationControllerDelegate { 

    func viewDidLoad() { 
     self.navigationController.delegate = self 
    } 

    func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) { 
     println("Did show VC: \(viewController)") 
    } 
} 

하지만 VC에 SEGUE이 완료 될 경우에만이 방법을 보여줍니다 것으로, 와 VC에있는 것 viewWillAppear() 또는 viewDidAppear() 위임 방법 제시되고있다. 그러나 그들은 목표 VC가 인 때를 알려주지 않고이 표시됩니다.

추적중인 VC에서 다음을 추가하여 VC (및 해당 메모리)가 할당 해제 된 경우를 감지하거나 viewWillDisappear() 메소드를 무시할 수 있습니다.

deinit { 
    println(__FUNCTION__, "\(self)") 
} 
+0

예상했던 것만 큼 나쁘지 않았습니다. 'self.navigationController = self;'그리고 그 메소드를 추가하십시오. Segue ID를 기반으로 컨트롤러를 로컬 변수에 저장 한 다음 전달 된 'ViewController'와 비교합니다. –

+7

이것은 출발 뷰 컨트롤러가 내비게이션 컨트롤러를 가지고 있지만 모달 섹터의 경우 어떻게 할 것인가? – Drux

+1

나는 레위에서 사용자 지정 SEGUE 응답을 사용하고 여기에 예처럼 내'perform'을 구현 : http://stackoverflow.com/a/23778394/586489이 내가 푸시가 완료 될 때 알고 segues을 사용할 수 있습니다, 아주 잘 작동합니다. –

14

viewDidAppear: 메서드를 사용하지 않으려는 경우 사용자 지정 단락을 만들 수 있습니다. perform 메서드에서 전환을위한 애니메이션을 사용하면 완료 블록을 가질 수 있습니다. 애니메이션이 완료되면 코드를 추가 할 수 있습니다.

+0

Storyboard의 표준 끌어서 놓기 단절 기능으로는 불가능합니다. – hakonbogen

+2

당신이 그것을 만드는 방법이지만'UIStoryboardSegue'를 서브 클래스 화하고'perform' 메소드를 구현해야합니다. 그 후,'storyboard'에서 여러분은 방금 만든 클래스로 segue의 클래스를 설정합니다. – Levi

-9

당신은 사용할 수 있습니다 - (무효) prepareForSegue : (UIStoryboardSegue *) SEGUE 보낸 사람 : (ID) 보낸 사람을

거랑은 소스의 UIViewController에서 수행되는 직전에 불려됩니다

. 대상 UIViewController에서 일부 코드를 수행하려는 경우 segue의 대상 viewcontroller를 얻을 수 있습니다.

또한이 코드를 desintation viewController의 viewdidAppearear에 추가 할 수 있습니다.

-9

prepareForSegue 메서드에서 대상 UIViewController 메서드를 호출 할 수 있습니다.

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSLog(@"prepareForSegue: %@", segue.identifier); 

    if ([segue.identifier isEqualToString:@"Happy"]) { 
     [segue.destinationViewController setHappiness:100]; 
    } else if ([segue.identifier isEqualToString:@"Sad"]) { 
     [segue.destinationViewController setHappiness:0]; 
    } 
} 

여기의 설정은 대상 컨트롤러의 것이며 여기는 100 개가 있습니다.

– navigationController:didShowViewController:animated: 
+3

실제 segue가 완료되면 실제로 그 사실을 나타내지 않습니다 .- 이것은 segue의 시작 부분에서 발생합니다. – Sam

7

을 스위프트에서는 UIViewController 서브 클래스에서 당신이 UINavigationController 인스턴스를 얻을 수 있고, 설정 :

관련 문제