【问题标题】:Storyboard prepareForSegue故事板 prepareForSegue
【发布时间】:2012-12-18 01:29:52
【问题描述】:

我有一个关于故事板转场的问题。平台为 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 将是一件简单的事情。任何有关如何执行此操作的代码示例将不胜感激。谢谢...

【问题讨论】:

  • 你在使用navigationViewController吗?如果你这样做了,当你想返回时,只需弹出视图控制器。
  • 我也会使用 UINavigationViewController
  • 是的,我正在使用 UINavigationController。

标签: iphone ios xcode


【解决方案1】:

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

因此,返回上一个视图控制器所需要做的就是弹出被推送的视图控制器。

把它放在你的 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;

【讨论】:

    猜你喜欢
    • 2012-03-30
    • 1970-01-01
    • 2012-01-29
    • 2012-10-11
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多