我制作的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''
所以我的问题是,还有什么可以正确地完成这个子类化?
答案 0 :(得分:4)
在iOS中设置视图控制器有两种方法。
-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中那样实现正确的委托和数据源方法。