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 来做到这一点。相反,我必须连接一个表格视图并手动订阅UITableViewDelegateUITableViewDataSource。如果我尝试子类化 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的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将内容包装为自定义视图

如何获取uibutton(UITableViewCell的子视图)相对于整个窗口iOS Objective-C的位置?

在为自定义视图调用 NSBundle(使用 loadNibName)后访问 IBOutlets 的最佳方法

为自定义活动指示器视图使 UIView 半透明

IOS/Objective-C:检测自定义表格视图单元格中的按钮按下?

IOS / Objective-C / Storyboard:从左到右的自定义Segue在视图控制器之间创建黑条