2013-10-25 79 views
2

是否有可能通過標籤更新iOS UITableView中的cell imageView?我讚賞其他方法可用,但我想盡可能使用標籤。通過標籤更新UITableView Cell imageView

我通過設置圖像:

cell.imageView.image = [UIImage imageNamed:@"dinner.png"]; 

而在另一種方法,我可以得到由細胞(標籤始終是唯一的):

NSInteger the_tag = ((UIView*)sender).tag; 
UITableViewCell *updateCell = (UITableViewCell*)[tableView viewWithTag:the_tag]; 

是否有可能更新與此單元格方法?這不起作用:

updateCell.imageView.image = [UIImage imageNamed:@"lunch.png"]; 

編輯:

在反映,標籤是壞的方法使用。您可以使用(這將給你行和部分,如果你有一分段表):

- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath { 
    NSLog(@"Tapped Row %@", indexPath); 
    UITableViewCell *cell = [self->tableView cellForRowAtIndexPath:indexPath]; 
    cell.imageView.image = [UIImage imageNamed:@"lunch.png"]; 
} 
+1

爲什麼你更喜歡使用標籤?它很脆弱,在這種情況下它破壞了封裝。 – Abizern

+0

我認爲你需要放置[self.tableView beginUpdates];在你的代碼和[self.tableView endUpdates]之前;在代碼後面,強制TableView更新其內容。 –

+0

我同意,標籤是一個不好的方法!更新了我的答案。 – Colin

回答

1

嘗試調用[updateCell setNeedsLayout][updateCell.imageView setNeedsLayout]

+0

謝謝你的回覆。不幸的是,他們導致「NSInvalidArgumentException」,原因:' - [UIImageView imageView]:無法識別的選擇器發送到實例「錯誤一如既往。 – Colin

+0

根據你的日誌,這聽起來像viewWithTag直接返回ImageView,而不是單元格 – slecorne

2
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomCell *cell = (CustomCell*)[tblView1 cellForRowAtIndexPath:indexPath.row]; 

    UIImageView *imageView = cell.imageView;//CustomCell you have imageView as @propertyVariable.. 
    imageView.image = [UIImage imageNamed:@"image.png"]; 
} 

我希望這將是對你有幫助.. 。

0

謝謝你所有的答案。經過反思,我覺得標籤是一種不好的使用方法。我已經更新了原來的帖子,我覺得這是一個更好的解決方案。

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

if(cell == nil){ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    cell.tag = indexPath.row; 
    cell.imageView.image = [UIImage imageNamed:@"icon.png"]; 
} 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
int tag = 2;//this is same at table cell row number. 
UITableViewCell *cell = (UITableViewCell*)[tableView viewWithTag:tag]; 
cell.imageView.image = [UIImage imageNamed:@"image.png"]; 
}