故事板prepareForSegue

时间:2013-01-03 16:35:34

标签: iphone ios xcode

我对故事板赛段有疑问。平台是iOS 6.1。目标设备是iPhone。 IDE是Xcode 4.5.2。我有2个TableViewControllers,它们都有一个segue(segOne& segTwo)到同一个ViewController。期望的结果是当用户导航到此ViewController时,他们将返回到原始的TableViewController。为此,我需要一些方法将原始segue(或TableViewController)的id传递给目标ViewController。在过去,我通过设置NavigationItem中的“后退”按钮来完成此操作,该按钮始终正常工作。现在,我想将后退按钮编码为单独的控件。

我理解为了实现这一点,我需要在我已经完成的源TableViewControllers中设置'prepareForSegue'方法。我遇到问题的是在destinationViewControllers中编写代码以编程方式识别两个segue中的哪一个是源segue,segOne或segTwo?两个segue在Storyboard Seque中被标识为'segOne'和'segTwo'。两者都是风格'推'节段,都是目标'当前'的细分。除了segue id之外,每个TableViewController实现文件都是相同的。这是我的代码:

头文件:

-(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的代码,用于识别两个segue中的哪一个,segOne或segTwo是原始segue。我知道任何代码都需要放在目标ViewController的viewDidAppear方法中。有了这个,在ViewController中编写IBAction以导航到原始的TableViewController将是一件简单的事情。任何有关如何执行此操作的代码示例将不胜感激。 THX ...

1 个答案:

答案 0 :(得分:3)

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

所以你需要做的就是回到上一个视图控制器,弹出被推送的那个。

将此放入您的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;