Ios 完成一段后如何执行一些代码?
在iOS 6中是否可能知道Ios 完成一段后如何执行一些代码?,ios,ios6,uiviewcontroller,segue,uistoryboardsegue,Ios,Ios6,Uiviewcontroller,Segue,Uistoryboardsegue,在iOS 6中是否可能知道UIStoryboardSegue何时完成了转换?就像当我从ui按钮添加uitoryboardsegue以在NavigationController上按下另一个UIViewController时,我希望在按下转换完成后立即执行某项操作。如果您不想使用viewdide:方法,您可以创建一个自定义segue。在perform方法中,您将使用动画进行过渡,并且可以使用完成块。动画完成后,您可以在那里添加代码。您可以使用-(void)prepareforsgue:(UIStor
UIStoryboardSegue
何时完成了转换?就像当我从ui按钮添加uitoryboardsegue
以在NavigationController上按下另一个UIViewController
时,我希望在按下转换完成后立即执行某项操作。如果您不想使用viewdide:
方法,您可以创建一个自定义segue。在perform
方法中,您将使用动画进行过渡,并且可以使用完成块。动画完成后,您可以在那里添加代码。您可以使用-(void)prepareforsgue:(UIStoryboardSegue*)segue sender:(id)sender
此方法将在源UIViewController中执行segue之前调用。如果要在目标UIViewController中执行一些代码,可以获取segue的目标viewcontroller
您还可以将此代码添加到显示在destination viewController中的视图中。您可以在PrepareForegue方法中调用目标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通过那里。因此,您可以在目标控制器中编写一个方法并在此处调用它您可以使用UINavigationControllerDelegate
协议,然后定义:
– navigationController:didShowViewController:animated:
在Swift中,从UIViewController
子类中,您可以获取UINavigationController
实例并设置委托,以便了解分段的完成情况,如图所示。跟踪分段的另一个逻辑位置可能是AppDelegate
从视图控制器(简称VC)执行此操作的示例:
但这只会在VC的程序完成后显示出来,
与正在呈现的VC中的委托方法一样,viewwillappease()
或viewdideappease()
;但是,他们不会通知目标VC何时取消呈现。仅当视图控制器是导航控制器堆栈的一部分时,它才起作用
在您正在跟踪的VC中,您可以添加以下内容来检测VC(及其内存)何时被释放,或者覆盖viewwilldemouse()
方法
deinit {
println(__FUNCTION__, "\(self)")
}
因此,在故事板中使用标准的拖放序列是不可能的?这是您创建它的方式,但您必须对UIStoryboardSegue
进行子类化,并在其中实现perform
方法。之后,在故事板中,你将segue的类设置为你刚刚创建的类。但这并不能真正表明实际segue何时完成-这发生在segue开始时,并不像我预期的那么糟糕<代码>self.navigationController=self编码>并添加该方法。我根据Segue ID将控制器保存到本地变量中,然后将这些值与传递的ViewController
进行比较。这将适用于原始视图控制器具有导航控制器的推送序列,但是在模态segues的情况下该怎么办呢?我使用了Levi提供的自定义Segue答案并实现了我的perform
,就像这里的示例:这非常好,我知道推送何时完成,并且可以使用segues。这是真的,但遗憾的是,对于我来说没有用,因为我使用的是自定义父视图控制器,不是导航控制器。如果您使用的是iOS9,您可以在一个Segue完成它的perform()
deinit {
println(__FUNCTION__, "\(self)")
}