iOS 6中是否可以知道UIStoryboardSegue
何时完成转换?就像当我从UIStoryboardSegue
添加UIButton
以在navigationcontroler上推送另一个UIViewController
时,我希望在推送转换完成后立即采取措施。
答案 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传递。所以你可以在目标控制器中编写一个方法并在这里调用它