2

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

我知道要做到这一点,我需要在我已经完成的源 TableViewControllers 中设置“prepareForSegue”方法。我遇到的问题是在destinationViewControllers 中编写代码以编程方式识别两个segue 中的哪一个是源segue、segOne 或segTwo?在 Storyboard Seque 中,这两个 segue 都被标识为“segOne”和“segTwo”。两者都是风格“推送”segues,都是目标“当前”segues。除了 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 将是一件简单的事情。任何有关如何执行此操作的代码示例将不胜感激。谢谢...

4

1 回答 1

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;
于 2013-01-03T17:49:48.677 回答