【问题标题】:Unwind segue from navigation back button从导航返回按钮展开 segue
【发布时间】:2013-06-17 02:15:06
【问题描述】:

我正在尝试通过执行 unwind segue 将数据传回我的源视图控制器。我在这里找到了答案: Unwind segue with Navigation back button

我按照第一个答案中的说明进行操作,但从未触发 segue。

在源视图控制器的 .h 中:

- (IBAction)returnJ:(UIStoryboardSegue *)segue;

这是我的源视图控制器 .m:

- (IBAction)returnJ:(UIStoryboardSegue *)segue
{
    NSLog(@"Returned");
    if ([[segue identifier] isEqualToString:@"return Jobs"]) {
        NSLog(@"Retuned");
        resSolarViewController *returnController = [segue sourceViewController];
        if (returnController.jobsList) {
            self.jobs = returnController.jobsList;
            [[self tableView] reloadData];
        }
        [self dismissViewControllerAnimated:YES completion:NULL];
    }
}

我很确定我已经在 IB 中正确连接了所有内容,但是这两个 NSLog 都从未显示在控制台中。

我做错了什么?

谢谢。

【问题讨论】:

    标签: ios segue


    【解决方案1】:

    如果只是将数据传回您的源视图控制器,您可以使用委托来完成。 How to pass prepareForSegue: an object

    【讨论】:

      【解决方案2】:

      @JosephGagliardo 走在正确的轨道上。但是,您必须添加一个测试以防止在不返回第一个视图控制器时触发 segue。 viewWillDisappear 中的类似内容实际上允许您为后退按钮执行展开转场。您不需要来自虚拟(屏幕外)按钮的动作转场。只需通过从类向下拖动到退出图标来创建手动展开转场。请务必在创建后为其命名。

      UIViewController *vc = self.navigationController.topViewController;
      if ([FirstViewController class] == [vc class])
      {
          [self performSegueWithIdentifier:@"unwindSegue" sender:self];
      }
      

      【讨论】:

        【解决方案3】:

        我创建了一个常规 UIButton 并将其连接到我想要的退出 segue。然后我使按钮不可见,并将其 X、Y 坐标移出屏幕。在 Dock 和属性检查器中找到 segue,为其命名。然后在 viewWillDisappear 中,我以编程方式按名称调用了 segue:

        [self performSegueWithIdentifier:@"unwindFromSettings" sender:self];
        

        我对正常转场和放松转场都这样做。为我以编程方式调用的 segue 创建一个隐藏按钮作为 GUI 占位符。

        【讨论】:

        • 现在您可以从故事板上视图控制器顶部的退出图标创建一个转场,您不再需要这样做了。
        猜你喜欢
        • 2014-10-11
        • 1970-01-01
        • 2012-11-13
        • 1970-01-01
        • 2015-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多