2013-08-19 108 views

回答

19

您可以使用UINavigationControllerDelegate协议,然后定义:

– navigationController:didShowViewController:animated: 
+0

没有我期望的那么糟糕。 'self.navigationController = self;'并添加该方法。我将控制器保存到基于Segue ID的局部变量中,然后将这些值与传递的ViewController进行比较。 –

+7

这将适用于原始视图控制器具有导航控制器的推送段,但在模态段的情况下该怎么办? – Drux

+1

我使用了来自Levi的Segue自定义的答案,并且在这里实现了我的'perform'像这样的例子:http://stackoverflow.com/a/23778394/586489这很好用,我知道什么时候push完成并且可以使用segues。 –

14

如果你不想使用viewDidAppear:方法,你可以创建一个自定义的segue。在perform方法中,您将为动画使用动画,并且可以有一个完成块。您可以在动画完成后将代码添加到那里。

+0

所以在Storyboard中使用标准的拖放式继承是不可能的? – hakonbogen

+2

这是你如何创建它,但你必须继承'UIStoryboardSegue'并在其中实现'perform'方法。之后,在'storyboard'中,您将segue的课程设置为您刚刚创建的课程。 – Levi

-9

您可以使用 - (空)prepareForSegue:(UIStoryboardSegue *)赛格瑞发件人:(ID)发送

权之前在源UIViewController中执行赛格瑞此方法将被调用。如果您想在目标UIViewController中执行一些代码,您可以获得segue的目标视图控制器。

您也可以将此代码添加到desintation viewController中的viewdidAppear中。

-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]; 
    } 
} 

这里setHappiness方法是目的地控制器,这里有100个传递。所以你可以写在目标控制器的方法,在这里称之为

+3

这并不能真正指出什么时候实际的赛季完成,但这发生在赛季开始时 – Sam

7

在斯威夫特,从UIViewController子类,你可以得到UINavigationController实例,并设置代表,以便了解有关赛段的完成情况,如图所示。跟踪赛段的另一个合理位置可能是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)") 
    } 
} 

但是,这仅显示了当SEGUE到VC完成后, 如VC将viewWillAppear()viewDidAppear()委托方法被呈现;然而,他们并不知道何时目标VC是联合国-介绍。

在您要跟踪的VC中,可以添加以下内容来检测VC(及其内存)何时解除分配,或覆盖viewWillDisappear()方法。

deinit { 
    println(__FUNCTION__, "\(self)") 
} 
相关问题