22

だから私は自分のセルを登録します:

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];

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

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    // setting up the cell
}

問題は、cell.detailTextLabel.textプロパティを設定できないことです。セルは決して ではありませんnil

4

7 に答える 7

39

最初に呼び出された場合、セル再利用識別子が一致する場合、テーブル ビューregisterClassはnil 以外のセルを返します。dequeueReusableCellWithIdentifier

registerClass は、通常、 から派生したカスタム セルになるセルに使用されると思いますUITableViewCell。カスタム セルは initWithStyle を上書きし、そこにスタイルを設定できます。

カスタム セルを作成する必要は必ずしもありません。

セル スタイルを設定する場合は、 を呼び出さないでくださいregisterClass

于 2013-05-22T02:35:00.087 に答える
2

カスタム セルを作成します。インターフェイス ビルダーでスタイルを変更します。テーブルビューを使用して、ビューコントローラーからセルを登録します。

スタイルを設定する

そしてコード:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.tableView registerNib:[UINib nibWithNibName:@"YourCustomCell" bundle:nil] forCellReuseIdentifier:kReuseIdentifier];
}

- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    YourCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:kReuseIdentifier];

    // Do things with the cell. 
    // The cell has no chance to be nil because you've already registered it in viewDidLoad method. 
    // So there's not need to write any code like if(cell==nil).
    // Just use it.

    return cell;
}
于 2015-01-12T09:34:16.337 に答える
2

最も簡単な方法は、ストーリーボードを使用し、IB でセル スタイルを設定することです。その場合、何も登録しないでください。また、if (cell == nil) 句を使用しないでください。dequeueReusableCellWithIdentifier: を使用するか、dequeueReusableCellWithIdentifier:forIndexPath を使用するかは問題ではないようです。どちらも、ストーリーボードでセルが作成されたときにセルを返すことが保証されています。

于 2013-05-22T05:58:17.457 に答える
0

これは古い質問です。代替ソリューションを提供したいだけです。

セルを登録した後、以下を試してみませんか。

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

次に、次のようにします。

[cell initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier ];

わたしにはできる。

于 2016-11-25T16:18:16.423 に答える
0

セル スタイルを変更する必要があります。

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

これに

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

これはあなたのために働くでしょう。

于 2013-05-22T05:19:40.413 に答える
0

セルに UITableViewCellStyleSubtitle スタイルを使用してみてください。if ステートメントの行を次のように変更します。

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
于 2013-05-22T02:36:09.283 に答える