2013-02-08 41 views
0

我试图更新可重用的UITableViewCell中按钮的标记。对于前5-8个单元,设置标签没有问题,因为这些单元尚未被我的理解“重用”。一旦UI必须重用单元格,它不再允许我更改标签或设置按钮的标签。我错过了什么?可重复使用的UITableViewCells的子按钮不允许我更新标记

UITableViewCell *cell =[tblPlaces dequeueReusableCellWithIdentifier:@"mainTableViewCell"]; 

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

[[cell viewWithTag:107] setTag:indexPath.section]; 
+0

你在哪里打电话呢?你的代码中的任何地方?或在你的cellForRowAtIndexPath? – Firo 2013-02-08 18:23:34

+0

它在我的cellForRowAtIndexPath函数中。如果有帮助,单元格实际上来自我的故事板中的UITableView。我正在初始化我相信的正确方式。我也编辑了上面的代码块。 – 2013-02-08 18:38:01

回答

1

即不工作,因为你改变你的按钮的标签与所创建的第一个单元格。当你将一个单元格出队重用时,它的按钮标签已经从之前改变过了,所以它不再是107了,它就是旧索引的东西。

我会考虑继承UITableViewCell并将按钮添加为您的子类的属性。这样你就可以直接访问它,并且不需要使用标签。

编辑:

这里是你真正需要做的一个非常简单的例子:

@interface MyTableViewCell : UITableViewCell 
@property (nonatomic, retain) UIButton *myButton; 
@end 

@implementation MyTableViewCell 

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Create and add your button in here, or set it equal to the one you create in Interface Builder 
    } 
    return self; 
} 

@end 
+0

啊有道理。我知道我错过了一件小事。你有任何明确的例子来为这个特定目的继承UITableViewCell吗? – 2013-02-08 18:59:27

+0

更新了我的答案,展示一个简单的例子 – 2013-02-08 19:18:53

+0

谢谢!实际上,子类化对我很有帮助。它给了我完全的控制,而不依赖于一个标签值进行操作。 – 2013-02-26 18:30:18

相关问题