1

サブクラス化されたUITableViewの設定に問題があります。

私が得ているのは空白の画面だけです。

それ自体に埋め込まれていUIViewます(UITableViewDelegateそしてUITableViewDataSourceに設定されていますUITableViewController.h):

    TableViewController *tableView = [[TableViewController alloc] 
                                     initWithStyle:UITableViewStyleGrouped];
    tableView.view.frame = CGRectMake(0.0, 50.0, 320.0, 
                           self.view.bounds.size.height);
    tableView.tableView.dataSource = tableView;
    tableView.tableView.delegate = tableView;
    [self.view addSubview:tableView.view];

次に、UITableViewControllerで、データソースとして使用するダミー配列を作成します。

library = [[NSArray alloc] initWithObjects:
                    @"Dummy 1",
                    @"Dummy 2",
                    @"Dummy 3",
                    @"Dummy 4", nil];

次に、必要なデータソースデリゲートメソッドを次のように実行します。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}

- (NSInteger)tableView:(UITableView *)tableView 
                       numberOfRowsInSection:(NSInteger)section
{
    int rows;
    if (section == 0) {
        rows = [library count];
    }
    else if (section == 1) {
        rows = 0;
    }
    return rows;
 }

- (NSString *)tableView:(UITableView *)tableView 
                        titleForHeaderInSection:(NSInteger)section {
    if(section == 0) {
        return [NSString stringWithFormat:@"Missions Library"];
    }
    else {
         return [NSString stringWithFormat:@"Acknowledgements"];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView 
                                   cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellId = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId 
                                       forIndexPath:indexPath];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                        reuseIdentifier:CellId];
    }

    cell.textLabel.text = [library objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    return cell;
}

私は多くのテーブルビューチュートリアルを読みましたが、問題を理解できません。エラーメッセージは表示されず、テーブルビュー画面が空白になります。

私は何を間違えましたか?

いくつかの更新:

  1. tableViewのビューをサブビューとして追加せずに直接呼び出すと、ヘッダーとフッターは表示されますが、セルは表示されません。

  2. cellForRowAtIndexPathメソッドはまったく呼び出されません(NSLogで確認しました)。これは私が細胞を取得しない理由を説明しています。

  3. 全体の演習は、画面の下部のみを占めるグループ化されたテーブルビューを作成することです。しかし、私のアプローチはこれを達成するための最良の方法ではないかもしれません...

4

4 に答える 4

3

ここでの問題は、ライブラリ配列にオブジェクトがロードされているのに、UITableViewインスタンス自体が(reloadDataを介して)これを通知されていないことだと思います。また、電話することを覚えておいてください

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId 
                                    forIndexPath:indexPath];

セルを確実に取得できるため、次の必要はありません。

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                     reuseIdentifier:CellId];
}

ストーリーボードで識別子が適切に設定されている限り。

私は間違っている可能性がありますが、データの入力がどこで行われるかを知る必要があります。

于 2012-12-25T22:21:02.777 に答える
2

[self.tableViewreloadData]が欠落しているようです。

また、iOS 6.0以降をサポートしている場合は、この方法を使用してください

registerClass:forCellReuseIdentifier:

UITableViewを設定するとき。これにより、

dequeueReusableCellWithIdentifier 

nilではなくセルを返すため、if(cell == nil)チェックを行う必要はありません。

于 2012-12-25T22:29:23.940 に答える
2

UIViewControllerにテーブルビューを追加する場合は、UITableViewControllerではなくUITableViewを追加する必要があります。

于 2012-12-25T23:25:38.187 に答える
2

TableViewControllerを使用する必要はありません。UITableViewを追加するだけです。

皮切りに:

UITableView *tableData;

次に、テーブルに入力してサブビューとして追加する方法。

于 2012-12-26T02:45:15.047 に答える