UITableViewCell 中的 UIButton 为 nil

Posted

技术标签:

【中文标题】UITableViewCell 中的 UIButton 为 nil【英文标题】:UIButton in UITableViewCell is nil 【发布时间】:2013-01-19 14:25:43 【问题描述】:

我在 UITableViewCell 中的 UIButton 有一些问题。 我使用原型单元在情节提要中创建了一个自定义 tableviewcell。 有两个按钮,我为它们设置了一个标签。 第一次绘制表格视图时,所有内容都显示正确,但如果我滚动或更新数据并在表格视图上调用 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];,一切都正确,但如果我滚动或重新加载视图,按钮为零? 为什么?检索标签的工作方式相同,并且显示正确。 如何更改单元格中按钮的标签?

问候

/弗雷德里克

【问题讨论】:

【参考方案1】:

快速猜测:我看到您正在重置用于引用它的按钮“标签”值。所以你不能再用值 104 检索它(在改变它之后)(在第一次创建之后它现在是 1 和 2)

[button setTag:1];

所以,你下次不会通过

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

我的假设是单元格没有被释放,因此这个标签值保持不变。也许这会解决它。

【讨论】:

是的!这确实是问题所在! :) 没有意识到这些标签是一样的......谢谢!

以上是关于UITableViewCell 中的 UIButton 为 nil的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UIButton 标题?

更改 UITableViewCell 中的对象也更改了重用 UITableViewCell 的对象

确定 UITableViewCell 中的 UIButton

UITableViewCell 事件中的 UIButton 不起作用

UITableViewCell 中的 UICollectionView

UITableVIewCell 中的 UIScrollView 不会滚动