2

我制作了一个只包含 IB 中的 UITableView 的 XIB。我注意到可以继承 UITableViewController 并完全取消 xib。

我的问题是,你是怎么做到的?

到目前为止,我唯一改变的是我的 .h 是......

   @interface MyView : UITableViewController

并删除了我的 XIB。显然我得到一个错误,指出

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'Could not load NIB in bundle: 'NSBundle  (loaded)' with <path>
 name 'MyView''

所以我的问题是,为了正确完成这个子类化,还剩下什么?

4

2 回答 2

4

在 iOS 中设置视图控制器有两种方法。

  • 使用 .xib 文件:您使用 实例化视图控制器-initWithNibName:bundle:,将 .xib 文件的名称作为第一个参数传递,并且(除非您正在做一些高级的事情)nil作为第二个参数。操作系统将查找您的 .xib 文件并将其反序列化为一堆对象并将它们附加到您的视图控制器。然后操作系统调用你的视图控制器子类的-viewDidLoad:方法,在那里你完成设置。
  • -init以编程方式:您使用或为表视图控制器实例化视图控制器initWithStyle:。操作系统然后调用您的子类的-loadView方法,您可以在其中手动实例化视图层次结构。

听起来您只需要使用-initWithStyle:而不是-initWithNibName:bundle:.

于 2013-01-30T22:01:03.350 回答
0

如果你有一个没有 .xib 的 ViewController,你可以在视图中创建一个 tableview 加载或其他东西。

UITableView *table = [[[UITableView alloc] initWithStyle:UITableViewStylePlain] autorelease];
table.dataSource = self;
table.delegate = self;
table.frame = CGRectMake(0, 10, self.view.frame.size.width, self.view.frame.size.height);
[self.view addSubview:table];

然后你只需要像在 UITableViewController 中那样实现正确的委托和数据源方法。

于 2013-01-30T21:50:22.120 回答