1

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

4

2 回答 2

3

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

于 2012-05-08T06:26:48.660 回答
0

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

要么将您的界面放在 xib(或故事板)中,然后在 viewDidLoad 中绑定这些值,要么在 loadView 中手动实例化 self.view。

于 2012-05-08T06:29:58.190 回答