在 didSelectRowAtIndexPath 中推送视图时修复空导航控制器?

Posted

技术标签:

【中文标题】在 didSelectRowAtIndexPath 中推送视图时修复空导航控制器?【英文标题】:Fix for null Navigation Controller when pushing view in didSelectRowAtIndexPath? 【发布时间】:2012-11-03 23:02:58 【问题描述】:

我已经使用 Storyboards 构建了我的表格。我在导航控制器中嵌入了一个表格视图。 My Details View 也是嵌入在 Navigation Controller 中的 Table View Controller。这是我的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  
    NHCDependantDetailsViewController *detailView = [self.storyboard instantiateViewControllerWithIdentifier:@"AddDependant"];
    [self.navigationController pushViewController:detailView animated:YES];
  

我发现问题在于我的导航控制器为空。不幸的是,我不知道如何或在哪里正确解决这个问题。提前谢谢你。

编辑:我已按照以下建议将导航控制器设置为初始视图控制器,但现在我无法访问我的 TableView。也许问题在我的故事板的这张图片中很明显?那里有两个导航箭头不是很好......

【问题讨论】:

只要意识到你有 2 个箭头指向所示的导航器控制器。第一个顶部箭头应连接到“Dependants View Contoller”的导航器控制器,因此不会跳过从属表视图 【参考方案1】:

我假设您的故事板有 1 个嵌入在导航控制器中的表格视图和 NHCDependantDetailsViewController,它也嵌入在导航控制器中。

首先,您需要在属性检查器上勾选“是初始视图控制器”,将表格视图的导航控制器设置为初始视图控制器。

其次,我认为没有必要将 NHCDependantDetailsViewController 嵌入到导航控制器中,因为您可以将许多视图控制器推送到主导航器控制器。

【讨论】:

将导航控制器设置为“初始视图控制器”似乎使我的 TableView 无法访问。我的整个表视图故事板是从一个 nib 实例化的,当我尝试导航到表视图时,它现在会跳到详细信息视图。而且我再也无法通过单击详细信息视图上的“完成”来访问 TableView。你能提供进一步的建议吗? 让我们先命名表视图,以便更容易处理不同的表视图。我们称它们为 NHCMaster 和 MHCDetail。在你的故事板上你应该只有 3 件事。 1 Navigator Controller 作为初始视图。此导航控制器连接到 NHCMaster。然后NHCMaster应该连接到NHCDetail。 'Done' 在 MHCDetail 应该触发 [self.navigationController popViewControllerAnimated:YES];在 MHCDetail 中删除 NHCDetail 从而可以再次查看 NHCMaster。 哇,改变它会破坏我的很多代码。其他人注意:除非您对表格和故事板有经验,否则不要使用本教程构建表格:http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1. 您的故事板上似乎有更多的视图控制器。只要确保当您“导航到表格视图”时,您实际上是访问/引用表格视图的导航控制器而不是直接访问表格视图。

以上是关于在 didSelectRowAtIndexPath 中推送视图时修复空导航控制器?的主要内容,如果未能解决你的问题,请参考以下文章

tableView - didSelectRowAtIndexPath 未调用

在 didSelectRowAtIndexPath 中呈现缓慢的 ViewController

我可以麻烦UITableViewDelegate的didSelectRowAtIndexPath:吗?

在 didselectRowAtIndexPath 之后 UITableView 无法滚动底部

在 tableView 上使用 CustomCell,如何调用 didSelectRowAtIndexPath?

didSelectRowAtIndexPath 不会在 ViewController 中触发