尝试从 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中的所有子视图?

独特区分 UIView

UISegmentControl,UISwich,UIPageControl

尝试从数组中的子对象创建数组

如何让文本在可滚动的 UILabel 中居中?

尝试从 django 中的子模板加载 css 样式表