无法将UITableView添加为子视图

时间:2012-05-08 06:22:29

标签: ios ios5

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添加到子视图中,我可以控制其宽度而不占用屏幕的整个宽度?

2 个答案:

答案 0 :(得分:3)

您需要self.view = tTableViewself.view = [UIView alloc] initWithFrame....,然后添加表格视图。覆盖loadView方法意味着您将创建self.view。因此,对于您的情况,请创建UIView,将其设置为self.view,然后将tableView添加为self.view

的子视图

答案 1 :(得分:0)

您使用loadView方法,这意味着您自己定义视图。 所以self.view没有被定义,控制器抱怨它的视图在它应该显示时没有被定义。

将您的界面放在xib(或storyboard)中并在viewDidLoad中绑定这些值,或者在loadView中手动实现self.view。