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