1

UITableViewCell の UIButton に問題があります。プロトタイプ セルを使用して、ストーリーボードにカスタム テーブルビュー セルを作成しました。2 つのボタンがあり、それらにタグを設定しました。テーブルビューが初めて描画されたときはすべて正しく表示されますが、データをスクロールまたは更新して tableview で reloadData を呼び出すと、正しく更新されません。

コード:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Moment Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

NSLog(@"Cell: %@", cell);

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
NSArray *row = [mMoment objectAtIndex:indexPath.row];

UILabel *label;

label = (UILabel *)[cell viewWithTag:101];
label.text = [row objectAtIndex:0];

label = (UILabel *)[cell viewWithTag:102];
label.text = [NSString stringWithFormat:@"Koeff: %@",[row objectAtIndex:2]];


UIButton *button;
NSString *btn_title;

button = (UIButton *)[cell viewWithTag:104];

NSLog(@"Button: %@", button);

[button setTag:1];
btn_title = [NSString stringWithFormat:@"%@", [row objectAtIndex:4]];
[button setTitle:btn_title forState:(UIControlState)UIControlStateNormal];
[button addTarget:self action:@selector(poangButtonClick:event:) forControlEvents:UIControlEventTouchUpInside];

NSLog(@"Row: %d, Poäng: %@", indexPath.row, btn_title);

label = (UILabel *)[cell viewWithTag:103];
label.text = btn_title;

button = (UIButton *)[cell viewWithTag:105];
[button setTag:2];
btn_title = [NSString stringWithFormat:@"%@", [row objectAtIndex:5]];
[button setTitle:btn_title forState:(UIControlState)UIControlStateNormal];
[button addTarget:self action:@selector(poangButtonClick:event:) forControlEvents:UIControlEventTouchUpInside];

return cell;

}

表示されているすべての行で初めてbutton = (UIButton *)[cell viewWithTag:104];呼び出されますが、すべて正しいですが、ビューをスクロールまたはリロードすると、ボタンは nil になりますか? なんで?同じ方法でラベルを取得すると、正しく表示されます。セル内のボタンのラベルを変更するにはどうすればよいですか?

よろしく

/フレドリック

4

1 に答える 1

5

簡単な推測:参照に使用するボタンの「タグ」値をリセットしているようです。したがって、値104で(変更した後)それを取得することはできません(最初の作成後は1と2になります)

[button setTag:1];

だから、あなたは次回経由でそれを取得することはありません

button = (UIButton *)[cell viewWithTag:105];

私の仮定では、セルの割り当てが解除されないため、このタグ値は残ります。多分これはそれを解決するでしょう。

于 2013-01-19T14:34:36.173 に答える