使用 TableView 向视图控制器添加导航

Posted

技术标签:

【中文标题】使用 TableView 向视图控制器添加导航【英文标题】:Adding a Navigation to a View Controller with a TableView 【发布时间】:2013-10-10 21:26:41 【问题描述】:

我正在尝试在视图控制器的顶部添加(或拥有)一个导航栏(或项目),并在导航栏的正下方添加一个表格视图。我遇到的问题是,当我将 tableview 的数据源设置为 View Controller 时,我的应用程序将崩溃(将 tableview 的委托设置为 View Controller 不会)。目前,tableview 的代码在默认的 ViewController.m 中。我是否将 tableview 的代码放在正确的位置,或者我是否连接不正确?

这是它给我的错误:

2013-10-10 15:14:48.442 SomeApp[15058:a0b]-[UIViewController>tableView:numberOfRowsInSection:]:无法识别的选择器发送到实例 0x8d42450 2013-10-10 15:14:48.450 SomeApp [15058:a0b] *** 由于未捕获的异常 >'NSInvalidArgumentException' 而终止应用程序,原因:'-[UIViewController >tableView:numberOfRowsInSection:]:无法识别的选择器发送到实例 0x8d42450'

【问题讨论】:

【参考方案1】:

确保您的视图控制器遵循正确的协议:

CustomViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

并将这些协议中的必要方法添加到您的实现中。这些是为您提供方便的文档链接:

UITableViewDelegate Protocol Reference

UITableViewDataSource Protocol Reference

【讨论】:

我已将其添加到 ViewController.h 中作为 `@interface ViewController : UIViewController ' 但它仍然崩溃。我想知道我是否将实现 tableview 的代码放在了错误的位置,或者我是否需要为包含 tableview 的 ViewController 创建另一个视图控制器类。 你实现了协议的每一个需要的方法吗?如果是这样,请尝试完全删除该文件。然后,创建一个新文件,但是当提示询问超类时,给它 UITableViewController 而不是 UIViewController。 我搞定了。正如你提到的,我创建了一个新课程。我还必须更改 Tableview 的属性以使用自定义类。谢谢。【参考方案2】:

您缺少一些表格视图工作所需的方法,

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

更多信息UITableViewDataSource Protocol Reference

【讨论】:

是的,我确实在 ViewController.m 中实现了它们(除非我需要在 .h 文件中添加定义)。我想知道是否需要为 ViewController 创建一个新类?

以上是关于使用 TableView 向视图控制器添加导航的主要内容,如果未能解决你的问题,请参考以下文章

向导航控制器添加按钮

TableView 作为带有导航控制器的子视图

旋转设备时表格视图更新无效

从 tableview 转到导航控制器前面的视图

加载嵌入在导航中的视图控制器

导航控制器未显示在 TableView 中