以编程方式设置segue标识符

比方说,我有一个TextField和一个button的ViewController。

我想使用unwind segue,以便在单击button后,我可以将textField的信息传递给另一个viewController。

我想使用PrepareForSegue方法,所以我可以保存textField中的文本之前,我“米”unwiding“属性。

我如何手动设置我的segue标识符? 如果它是一个酒吧button项我可以使用IB来设置标识符(例如“保存”),然后使用它。 事实并非如此,只是一个普通的button。

以编程方式创buildsegues是不可能的。 没有故事板就不能存在。

看到这个问题 。

您可以通过编程轻松添加一个segue(不使用storyboard)。 在源视图控制器头文件中:

@property (nonatomic, strong) UIStoryboardSegue *segue; 

在源视图控制器实现文件中,相应地设置segue属性:

 self.segue = [UIStoryboardSegue segueWithIdentifier:[NSString stringWithFormat:@"%lu", indexPath.item] source:self destination:[PlayerViewController sharedPlayerViewController] performHandler:^{ // Insert whatever; nothing is needed for a basic segue }]; 

另外,在源视图控制器中,添加在prepareForSegue方法中设置和转换的目标视图控制器:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // The code in this method both sets up the destination view controller and transitions to it; you could optionally do set up here only, and then transition in an overridden -(void)perform method. This way is more convenient. [(PlayerViewController *)segue.destinationViewController setView:[PlayerView sharedPlayerView]]; PHAsset *phAsset = (PHAsset *)AppDelegate.assetsFetchResults[segue.identifier.integerValue]; [AppDelegate.cacheManager requestAVAssetForVideo:phAsset options:AppDelegate.videoOptions resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) { [[PlayerView sharedPlayerView] addSubview:[PlayerControls sharedPlayerControls]]; [[PlayerControls sharedPlayerControls] setDelegate:(PlayerViewController *)segue.destinationViewController]; [[PlayerView sharedPlayerView] addSubview:[AppDelegate playerControlsLabel]]; [(PlayerViewController *)segue.destinationViewController setupPlaybackForAsset:asset completion:^{ [((AssetsCollectionViewController *)sender).navigationController presentViewController:(PlayerViewController *)segue.destinationViewController animated:TRUE completion:^{ }]; }]; }]; } 

另外,在源视图控制器实现文件的任何地方添加这一行来执行segue:

 [self prepareForSegue:self.segue sender:self]; 

prepareForSegue方法的调用可以在IBAction处理程序和其他任何地方进行。

请注意,呈现目标视图控制器的代码引用了未在故事板中设置的视图控制器; 从这个代码被采取的项目不使用故事板的任何东西。 但这并不重要,因为segue代码将是相同的。

另外请注意,您不必以任何方式,形状或forms修改目标视图控制器。 以编程方式创build一个展开顺序(换句话说,build立在这里显示的单向顺序):

 @implementation RootNavigationController - (UIStoryboardSegue*)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier { return [toViewController segueForUnwindingToViewController:toViewController fromViewController:fromViewController identifier:identifier]; } 

@结束

现在,这就是我在自己的应用程序中所做的。 这里是别人已经做了什么,而不使用故事板创build一个segue(而不是没有故事板):

 - (void)presentSignupViewController { // Storyboard ID UIStoryboard *modalStoryboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil]; UINavigationController *navController = [modalStoryboard instantiateViewControllerWithIdentifier:@"MySignupViewController"]; MySignupViewController *controller = [navController viewControllers][0]; // Configure your custom view controller, eg setting delegate controller.delegate = self; // Show VC navController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; BlurryModalSegue *segue = [[BlurryModalSegue alloc] initWithIdentifier:@"SignupScene" source:self destination:navController]; [segue perform]; } 

区别只在于使用perform和prepareForSegue:当不使用storyboard的时候,你必须在performForSegue方法中调用你select的过渡方法(push …或者present …) 然而,转换方法是否由执行方法调用。

 <iframe width="853" height="480" src="https://www.youtube.com/embed/y8Fu2PEO2zo?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe>