子类化UITableView所以它不需要xib

时间:2013-01-30 21:19:26

标签: iphone ios objective-c xcode ipad

我制作的XIB只包含IB中的UITableView。引起我注意的是,可以继承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''

所以我的问题是,还有什么可以正确地完成这个子类化?

2 个答案:

答案 0 :(得分:4)

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

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

听起来您只需要使用-initWithStyle:而不是-initWithNibName:bundle:对其进行实例化。

答案 1 :(得分: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中那样实现正确的委托和数据源方法。