Xcode 4.3 / iOS 5.1 /故事板。
我在故事板中有一个带UITableView的UIViewController
初始化该视图时
-(void) loadView {
UITableView *tTableView = [[UITableView alloc] initWithFrame:CGRectMake(20,60, 300, 300)
style:UITableViewStyleGrouped];
[tTableView setDelegate:self];
[tTableView setDataSource:self];
[tTableView setBackgroundView:[[UIView alloc] initWithFrame:self.tableView.bounds]];
self.tableView = tTableView;
self.view = tTableView; // <--- THIS WORKS
}
这样可行,但TableView在整个屏幕宽度上拉伸。我希望它具有一定的大小,因为我将其用于登录用户名/密码控制。
我被告知将其添加为子视图,但这会使我的应用程序崩溃,并使用某种递归调用相同的“loadView”方法。
-(void) loadView {
UITableView *tTableView = [[UITableView alloc] initWithFrame:CGRectMake(20,60, 300, 300)
style:UITableViewStyleGrouped];
[tTableView setDelegate:self];
[tTableView setDataSource:self];
[tTableView setBackgroundView:[[UIView alloc] initWithFrame:self.tableView.bounds]];
self.tableView = tTableView;
[self.view. addSubview: tTableView]; // <-- THIS CRASHES
}
为什么会崩溃?如何将UITableView添加到子视图中,我可以控制其宽度而不占用屏幕的整个宽度?
答案 0 :(得分:3)
您需要self.view = tTableView
或self.view = [UIView alloc] initWithFrame....
,然后添加表格视图。覆盖loadView
方法意味着您将创建self.view
。因此,对于您的情况,请创建UIView
,将其设置为self.view,然后将tableView添加为self.view
答案 1 :(得分:0)
您使用loadView方法,这意味着您自己定义视图。 所以self.view没有被定义,控制器抱怨它的视图在它应该显示时没有被定义。
将您的界面放在xib(或storyboard)中并在viewDidLoad中绑定这些值,或者在loadView中手动实现self.view。