【发布时间】:2012-09-21 12:57:24
【问题描述】:
假设您实现了一个自定义表格视图和一个自定义视图控制器(它主要模仿 UITableViewControllers 的行为,但是当以编程方式初始化时,...
@interface Foo : MyCustomTableViewController ...
Foo *foo = [[Foo alloc] init];
...foo.view 是类MyCustomTableView 而不是UITableView:
// MyCustomTableView.h
@protocol MyTableViewDelegate <NSObject, UITableViewDelegate>
// ...
@end
@protocol MyTableViewDataSource <NSObject, UITableViewDataSource>
// ...
@end
@interface MyCustomTableView : UITableView
// ...
@end
// MyCustomTableViewController.h
@interface MyCustomTableViewController : UIViewController
// ...
@end
您应该如何以正确的顺序/方式实现/覆盖 init 方法,以便您可以通过以编程方式子类化 MyCustomTableViewController 或通过将自定义类类型设置为从任何自定义 nib 文件创建和使用 MyCustomTableView 的实例界面生成器中的MyCustomTableView?
请务必注意,这正是 UITableView(主要是 UIKit)现在的工作方式:开发人员可以通过编程方式或通过 nib 创建和使用,无论是 File owner 的主要 @ 987654333@ 或更复杂层次结构中的某些子视图,只需分配数据源或委托,就可以了...
到目前为止,如果您将MyCustomTableViewController 子类化,我将成功实现此功能,我将在其中创建MyCustomTableView 的实例并在loadView 方法中将其分配给self.view;但无法弄清楚initWithNibName:bundle:、initWithCoder:、awakeFromNib、awakeAfterUsingCoder: 或其他任何操作的方式。我迷失在生命周期链中,每次都以黑屏/黑屏告终。
谢谢。
【问题讨论】:
标签: ios uitableview uiview uiviewcontroller interface-builder