segue完成后如何执行一些代码?

时间:2013-08-19 09:22:57

标签: ios ios6 uiviewcontroller segue uistoryboardsegue

iOS 6中是否可以知道UIStoryboardSegue何时完成转换?就像当我从UIStoryboardSegue添加UIButton以在navigationcontroler上推送另一个UIViewController时,我希望在推送转换完成后立即采取措施。

5 个答案:

答案 0 :(得分:19)

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

– navigationController:didShowViewController:animated:

答案 1 :(得分:15)

如果您不想使用viewDidAppear:方法,可以创建自定义segue。在perform方法中,您将使用动画进行转换,并且可以使用完成块。您可以在动画完成后在那里添加代码。

答案 2 :(得分:8)

在Swift中,您可以从UIViewController子类获取UINavigationController实例并设置委托,以便了解segue的完成情况,如图所示。跟踪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的完成, 正如所呈现的VC中的viewWillAppear()viewDidAppear()委托方法一样;但是,它们不会告知目标VC何时 un 呈现。它也只有在View Controller是导航控制器堆栈的一部分时才有效。

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

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

答案 3 :(得分:-10)

您可以使用 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

在源UIViewController中执行segue之前,将调用此方法。如果你想在目标UIViewController中做一些代码,你可以获得segue的目标viewcontroller。

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

答案 4 :(得分:-10)

您可以在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传递。所以你可以在目标控制器中编写一个方法并在这里调用它