1

Xcode 4.3 / iOS5.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 = tTableViewまたはself.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 に答える