尝试从 UISegmentControl 中的子视图启动 UINavigationController
Posted
技术标签:
【中文标题】尝试从 UISegmentControl 中的子视图启动 UINavigationController【英文标题】:Trying to initiate UINavigationController From A Subview in UISegmentControl 【发布时间】:2013-07-19 20:34:59 【问题描述】:我在一个 ViewController 中有 UISegmentControl,我在其中嵌入了一个 NavigationController 用于导航。在那个 UISegmentControl 中,我有三个 3 段,我在三个 UITableViewController 之间切换。这些 UITableViewController 在从一个段切换到另一个段时显示在子视图中。我想要做的是当用户点击一个单元格时,我想在该视图中显示 DetailViewController 。
这里是切换 UISegmentControl 的代码 -
-(IBAction)valueChanged:(id)sender
segmentControl=(UISegmentedControl*)sender;
if (segmentControl.selectedSegmentIndex==1)
firstView = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstTopViewController"];
[self.view addSubview:firstView.view];
NSLog(@"1");
在 FirstTopViewController.m -
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
DetailViewController *detailView = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
FirstViewController *firstView = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
detailView.detail = [self.jobsArrayFromAFNetworking objectAtIndex:indexPath.row];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:firstView];
[self.view addSubview:nav.view];
[nav pushViewController:jobDetailView animated:YES];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
UINavigationController 出现,但在与 UITableViewController 相同的子视图中,并且当我尝试滚动或点击任何段时崩溃。我怎样才能正确实现导航?任何帮助将不胜感激。
【问题讨论】:
你能把你得到的错误信息贴出来吗? lldb 是我得到的蓝色 【参考方案1】:你几乎做到了,我认为你需要做的事情是:
在您的valueChanged
方法中,您可以设置UINavigationController
及其根视图控制器(firstViewController)。像这样:
FirstViewController *firstView = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:firstView];
[self.view addSubview:nav.view];
然后在didSelectRowAtIndexPath
中执行以下操作:
DetailViewController *detailView = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
[self.navigationController pushViewController:detailView]
有意义吗?
编辑:关键是,在开始时将您的 navController 和 firstViewController 组合起来(在分段控制值更改时),然后在单元格选择时创建并将 detailViewController 推送到现有的 navController 上。
【讨论】:
感谢您的回复。问题是,我已经在情节提要中嵌入了 UINavigationController,这就是我拥有 UISegmentControl 的地方。我不希望子视图中的视图用于导航。我希望它使用相同的 self.navigationController。有什么想法吗? 嗯,我不确定这是否可行/是最好的方法。听起来分段控件正在控制几个 UIViewController,就像一个 UITabBarController。最好将两种类型的 UIViewController 管理分开(类似于 TabBarController 的层次结构与推送/弹出线性层次结构),方法是将它们有效地分成两个导航控制器,每个控制器管理一个单独的视图层次结构。我认为我上面的建议是一种更好的方法,除非我对您的设置有什么不明白的地方。以上是关于尝试从 UISegmentControl 中的子视图启动 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章
如何列出iOS中uiviewcontroller中的所有子视图?