【问题标题】:iOS + Storyboard: Re-using ViewControllers in navigationiOS + Storyboard:在导航中重用 ViewController
【发布时间】:2013-04-14 09:29:33
【问题描述】:

在我当前的应用程序中,我想多次使用某个UICollectionView,但选择行为不同。将以下情节提要布局视为“现状”(并且有效):

标签栏控制器(2 项): -> 导航控制器 1 -> 集合视图控制器 -> 一些表视图控制器 -> 导航控制器 2 ->(基本)视图控制器

Basic View Controller 有两个 UIButtons,它们的 Storyboard Push-连接到 Collection View Controller。我想要的是从Basic View Controller 过渡到Collection View Controller,但是从集合中选择一个项目应该弹出视图并返回到Basic View Controller

我在Collection View Controller 中设置了一个自定义属性,该属性在Basic View Controller 的相应prepareForSegue 消息中设置(或者根本没有,如果用户选择Tab Bar Item),所以没有问题检测哪个控制器或哪个 UI 组件触发了推送(有 3 种方法:选择标签栏项目或点击基本视图上的按钮之一)。

问题是弹出Collection View

到目前为止我的代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if (self.mode == nil) { // 没做什么 } else if ( [self.mode isEqualToString:@"foobar"] ) { // 我试过的一种方法 [自我dismissViewControllerAnimated:是完成:无]; } else if ( [self.mode isEqualToString:@"blah"] ) { // 其他方法 BasicViewController *targetVC = self.navigationController.viewControllers[ 0 ]; [self.navigationController popToViewController:targetVC 动画:YES]; } }

不幸的是,我的应用程序在 dismiss 行分别崩溃。 popToViewController。甚至可以在不同的导航方式中使用相同的视图控制器吗?

我希望有足够的信息来帮助我解决这个问题。您可能知道,项目在增长,我不知道是否还有更多代码需要考虑:)

提前致谢!

【问题讨论】:

    标签: ios segue navigationcontroller


    【解决方案1】:

    prepareForSegue: 方法不是放置该代码的正确位置。它在 segue 执行之前被调用,这通常意味着已经有某种过渡即将发生。

    我假设您已将您的集合视图单元格与一个 segue 连接,并且现在正尝试根据 collectionVC '之前'的视图控制器修改该 segue 的行为。

    在这种情况下,有一些可能的解决方案:

    【讨论】:

      【解决方案2】:

      “集合视图控制器”中选定行的操作因“集合视图控制器”的显示位置而异。在一种情况下,返回到“基本视图控制器”,在另一种情况下,转到“某些表视图控制器”

      通过定义tableView:didSelectRowAtIndexPath: 来实现这一点:

      - (void)        tableView: (UITableView *) tableView 
        didSelectRowAtIndexPath: (NSIndexPath *) indexPath
      {
         if (self.parentIsBasicViewController)  // set in the incoming segue, probably.
            [self.presentingviewController dismissViewControllerAnimacted: YES completion: nil]
         else
            [self performSegueWithIdentifier: @"some Table View Controller" sender: self];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-30
        • 2023-03-24
        • 2021-01-31
        • 2015-05-30
        • 2015-08-20
        • 2012-04-29
        • 1970-01-01
        相关资源
        最近更新 更多