故事板prepareForSegue

我有一个关于故事板游戏的问题。 平台是iOS 6.1。 目标设备是iPhone。 IDE是Xcode 4.5.2。 我有两个TableViewControllers,它们都有一个segue(segOne&segTwo)到同一个ViewController。 所需的结果是,当用户导航到这个ViewController,他们将返回到原始TableViewController。 要做到这一点,我需要一些方法来传递始发segue(或TableViewController)的ID到目标ViewController。 在过去,我通过在NavigationItem中始终正常工作的“后退”button来实现这一点。 现在,但是我想代码后退button作为单独的控制。

我明白要做到这一点,我需要在我已经完成的源TableViewControllers中设置“prepareForSegue”方法。 在我遇到问题的地方是在destinationViewControllers中编写代码,以编程方式确定哪两个segue是源segue,segOne或segTwo? Storyboard Seque中的两个seg都被识别为“segOne”和“segTwo”。 这两种风格都是“推”式的,而且都是目前的“当前”阶段。 每个TableViewController实现文件都是相同的,除了segue ids。 这是我的代码:

头文件:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender; 

执行文件:

 -(void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender { if([[segue identifier] isEqualToString:@"segOne"]) { NSLog (@"TableViewController1: segue.identifier %@", segue.identifier); NSLog (@"TableViewController1: self %@", self); NSLog (@"TableViewController1: sender %@", (id)sender); } } 

输出正是我所期望的。 这里是forTableViewController1:

 TableViewController1: segue.identifier segOne TableViewController1: self <TableViewController1: 0x928eb70> TableViewController1: sender <UITableViewCell: 0x927a3e0; frame = (0 22; 768 44); text = ' 1. birth month and year...'; autoresize = W; layer = <CALayer: 0x928d380>> 

所以,我需要的是ViewController的代码,它可以识别segOne或segTwo中哪一个是始发的Segue。 我明白,任何代码需要在目标ViewController的viewDidAppear方法。 一旦我有了这个,将ViewController中的IBAction编码为一个简单的事情来导航到原始的TableViewController。 任何代码示例如何做到这一点,将不胜感激。 谢谢…

当您使用导航视图控制器推视图控制器时,它将被推到视图控制器的堆栈顶部。

所以你所要做的就是回到前一个视图控制器,popup一个被推送的视图控制器。

把这个放在你的IBAction方法中:

 [self.navigationController popViewControllerAnimated:YES]; 

现在,如果您真的想知道使用了哪个segue,那么只需将segue标识符传递给目标控制器,然后将其放置在如下属性中:

 -(void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender { if([[segue identifier] isEqualToString:@"segOne"]) { MyOtherViewController *other = (MyOtherViewController *)segue.destinationViewController; other.theSegueIUsed = @"segOne"; } } 

您还需要将该属性添加到其他视图控制器头文件中:

 @property (strong, nonatomic)NSString *theSegueIUsed;