Objective-C / iOS:为自定义视图子类化 UITableViewController
Posted
技术标签:
【中文标题】Objective-C / iOS:为自定义视图子类化 UITableViewController【英文标题】:Objective-C / iOS: Subclassing UITableViewController for a custom view 【发布时间】:2012-07-16 15:52:59 【问题描述】:众所周知,Cocoa Touch 中的表格视图是最漂亮的框架元素之一。为了方便起见,Apple 为我们提供了一个很好的视图控制器类,用于将表格视图的功能封装在 vc 中,UITableViewController
。
同时,有时我们希望利用表格视图的功能,而不是让它占据整个屏幕。但是,似乎没有办法通过子类化UITableViewController
来做到这一点。相反,我必须连接一个表格视图并手动订阅UITableViewDelegate
和UITableViewDataSource
。如果我尝试子类化 UITableViewController
,我的应用程序甚至在将视图显示在屏幕上之前就崩溃了...
我的问题是,有什么我遗漏的吗?当子类化UITableViewController
时,我将我的自定义表格视图连接到UITableViewController
中的tableView 属性。我还有什么需要做的吗?
【问题讨论】:
学习以正常方式进行操作(委托/数据源等)。一旦你完成了它就非常容易并且更加灵活 - 拥有很好的技能。无论如何...您是自己编写的课程还是让 xcode 为您生成? 不要继承 UITableViewController。如果你需要做任何它没有给你的事情(大多数人都是),使用一个常规的 UITableView 并自己定制它。它实际上只用于最简单的情况。 见:cocoawithlove.com/2009/03/… 【参考方案1】:UITableViewController
仅比UIViewController
增加了一些小便利:它创建和定位表视图,连接委托和数据源(通常与其自身),将视图控制器editing
属性传递给表,并且当视图出现时,会做一些有用的 UI 位。 (有关详细信息,请参阅 [the docs][1]。)
以上几乎所有内容都是 A)您需要更改以拥有非全屏表格的事情,或 B)您可以在一行或两行中执行的事情,以及 @987654324 @ 只是为了您的方便。对于这种情况,您最好使用自己的 UIViewController
子类。
【讨论】:
【参考方案2】:第 1 步:子类 UIViewController
而不是 UITableViewController
MyTableViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
第 2 步:使用界面生成器删除 tableView 和自定义 View
步骤 3:在 MyTableViewController
头文件中将 tableView 属性声明为 IBOutlet
并将其绑定到界面生成器中的 tableView
恕我直言,这个过程会给你更多的灵活性。
【讨论】:
以上是关于Objective-C / iOS:为自定义视图子类化 UITableViewController的主要内容,如果未能解决你的问题,请参考以下文章
如何获取uibutton(UITableViewCell的子视图)相对于整个窗口iOS Objective-C的位置?
在为自定义视图调用 NSBundle(使用 loadNibName)后访问 IBOutlets 的最佳方法