Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 完成一段后如何执行一些代码?_Ios_Ios6_Uiviewcontroller_Segue_Uistoryboardsegue - Fatal编程技术网

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

Ios 完成一段后如何执行一些代码?,ios,ios6,uiviewcontroller,segue,uistoryboardsegue,Ios,Ios6,Uiviewcontroller,Segue,Uistoryboardsegue,在iOS 6中是否可能知道UIStoryboardSegue何时完成了转换?就像当我从ui按钮添加uitoryboardsegue以在NavigationController上按下另一个UIViewController时,我希望在按下转换完成后立即执行某项操作。如果您不想使用viewdide:方法,您可以创建一个自定义segue。在perform方法中,您将使用动画进行过渡,并且可以使用完成块。动画完成后,您可以在那里添加代码。您可以使用-(void)prepareforsgue:(UIStor

在iOS 6中是否可能知道
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)")
}