【发布时间】:2012-02-05 08:11:04
【问题描述】:
必须有一个简单的解决方案,但在浏览 StackExchange 4 小时后,我放弃并试图在这里得到答案:
情况: iOS 5,Xcode 4.2.1,使用 Storyboards
设置:
- 根导航控制器 = 带有 5 个项目的 UITabBarController
- 每个选项卡都链接到一个 UITableViewController(通过 segues),它可以完美地自动运行
- 我有每个视图控制器和导航控制器 (UITabBarController) 的类
- 我点击一个选项卡,说“程序”,它会显示一个项目列表(在链接的 UITableViewController 中),说这些项目之一是“会话”
- 我点击“Sessions”,didSelectRowAtIndexPath 被调用就好了。
- 我现在想执行一个 segue(我已经从那个 UITableViewController 而不是单元格连接到新的 UITableViewController 并给它一个标识符。
我打电话给:
[self performSegueWithIdentifier:@"programToSessions" sender:self];prepareForSegue 被调用,但之后什么也没有。没有错误,没有警告。新的 UITableViewController 没有出现。
- 注意:但是,如果我将 segue 切换到“模态”,它确实会显示 - 但它会丢弃/隐藏底部的原始标签栏(不打算...)
到目前为止,我的问题似乎有一个可能的解决方案。导航控制器。我想,如果我在 AppDelegate 中设置导航控制器引用,则在加载实际的根导航控制器(在 viewDidLoad 中)后启动/设置它,即基本上使用了类似以下内容的东西:viewDidLoad 中的app.navController = self.navigationController - 这可以工作!正确的?因此,我将 segue 操作更改为:
[app.navController performSegueWithIdentifier:@"programToSessions" sender:self];
然而,没有任何改变,它没有出现。
有什么想法吗?
已解决:
这里有一些问题。主要问题是我错过了在 UITabBarController 和 UITableViewController 之间放置“导航控制器”的事实。这可以通过向情节提要添加一个新的“导航控制器”来完成,然后从 UITabBarController(rootViewController)拖动到这个新控制器并设置一个关系。接下来,将 RELATIONSHIP 拖到 UITableViewController。因此,正如正确答案所述,它应该如下所示: UITabBarController --> (关系) --> UINavigationController --> (关系) --> UITableViewController
为了在最后一个 UITableViewController 之上加载新的 UITableViewController,一个简单的 segue 并通过代码调用它就足够了。最终的树将如下所示:
UITabBarController --> (relationship) --> UINavigationController --> (relationship) --> UITableViewController --> (segue) --> UITableViewController
给 segue 一个标识符。在代码中,使用这个:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"loadMyDetailView" sender:self];
}
【问题讨论】:
-
您的解决方案对我有用。您应该将其发布为答案,以便人们可以投票
标签: iphone objective-c uitabbarcontroller uitableview storyboard