点击 UITableViewCell 时如何正确显示 UINavigationController?

Posted

技术标签:

【中文标题】点击 UITableViewCell 时如何正确显示 UINavigationController?【英文标题】:How do I correctly display a UINavigationController when tapping a UITableViewCell? 【发布时间】:2014-04-21 01:29:35 【问题描述】:

我是 ios 开发新手。我有一个具有UINavigationController 的应用程序(带有嵌入式UITableViewController,称为TableView1),我需要通过点击UITableViewCell 为TableView1 显示另一个UITableView(TableView2)。

我做了一些在线搜索,并没有真正找到任何超级有用的东西,但是我能够找到的内容是我必须展示 TableView2 而不是推送它。一切正常,除了 TableView2 没有后退按钮,我必须创建自己的 UIBarButtonItem 并分配给 leftBarButtonItemnavigationItem

这一切都很好,除了我不禁觉得我做错了。有没有更简单的方法(或更正确的方法)来完成我想要完成的事情?

TableView1 的代码

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewController *tableViewController = [[UITableViewController alloc] init];

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:tableViewController];

    [self.navigationController presentViewController:navigationController
                                            animated:YES
                                          completion:nil];

编辑:除了这个问题,如果我发现我这样做是正确的,我如何让正常的后退按钮显示?或者我可以吗?

【问题讨论】:

为什么不想推送呢? 不是不想推。我试图推动 UINavigationController,但什么也不会发生。我设置了segue来推动,但没有。做了一些研究,发现你不能从 UITableViewCell 推送 UINavigationController。不确定这是否正确,我只知道 push 不起作用,但是当我将代码更改为 presentViewController 时,它起作用了。 【参考方案1】:

直接从那个视图控制器展示它:

[self presentViewController:navigationController animated:YES completion:nil];

或者使用pushViewController:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewController *tableViewController = [[UITableViewController alloc] init];

    [self.navigationController pushViewController:tableViewController animated:YES];

【讨论】:

好的,我试过了,结果和以前一样。 @dstepan 我已经更新了我的答案,包括如何推送视图控制器 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“不支持推送导航控制器” 请注意我的回答是我推送 tableViewController 啊!你是圣人。只推送 UITableViewController 效果很好!

以上是关于点击 UITableViewCell 时如何正确显示 UINavigationController?的主要内容,如果未能解决你的问题,请参考以下文章

如何在单元格选择/取消选择时正确切换 UITableViewCell 的 accesoryType?

如何在 UITableViewCell 上正确显示一个 AVPlayerViewController?

UITableViewCell 中的 UIButton 是可点击的(获取正确的事件)但问题是点击效果不可见

如何根据 UITableViewCell 点击更新 UINavigationItem?

检测点击UITableViewCell中包含多个部分的UITableView的按钮

当我点击 UITableViewCell 时,视图控制器没有被推送。