0

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

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

Basic View Controller两个与. _ 我想要的是从 过渡到,但是从集合中选择一个项目应该弹出视图并返回到.UIButtonsPushCollection View ControllerBasic View ControllerCollection View ControllerBasic View Controller

我已经在其中设置了一个自定义属性,该属性在Collection View Controller相应的prepareForSegue消息中设置Basic View Controller(或者根本不设置,如果用户选择 a 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];
    }
}

不幸的是,我的应用程序崩溃了dismisspopToViewController. 甚至可以以不同的导航方式使用相同的视图控制器吗?

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

提前致谢!

4

2 回答 2

0

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

我假设你已经将你的集合视图单元与一个 segue 连接起来,现在正试图根据 viewcontroller 在 collectionVC 之前修改那个 segue 的行为。

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

  • 不要对特定的过渡使用 segues 并手动执行任何 vc-transitions
  • 编写自己的UIStoryboardSegue子类来处理不同的转换。请参阅UIStoryboardSegue 类参考。然后你可以在prepareForSegue:方法中设置你的自定义 segue 的一些属性,告诉 segue 它应该执行哪个转换。
  • 使用展开的segues。请参阅什么是 Unwind segues 以及如何使用它们?
于 2013-04-21T12:22:21.767 回答
0

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

通过定义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];
}
于 2013-04-21T13:38:48.663 回答