在特定的uitableviewcell中更新uibutton时出现问题。当我更改按钮颜色时,它会更新uitableview中的每个按钮。附上我的代码:
PFObject *post = [self.objectArray objectAtIndex:indexPath.section];
cell.likeBtn.layer.cornerRadius = 5.0f;
//To access button methods
[cell.likeBtn setTag:indexPath.section];
NSMutableDictionary *attributes = [NSMutableDictionary
dictionaryWithDictionary:[[TMMemoryCache sharedCache] objectForKey:post.objectId]];
BOOL likedByCurrentUser = [[attributes objectForKey:@"likedByCurrentUser"] boolValue];
if (likedByCurrentUser) {
cell.likeBtn.backgroundColor = [UIColor flatRedColor];
[cell.likeBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[cell.likeBtn setTitle:@"Liked" forState:UIControlStateNormal];
}else{
//NSLog(@"Did not like %@", post.objectId);
cell.likeBtn.backgroundColor = [UIColor flatBlueColor];
[cell.likeBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[cell.likeBtn setTitle:@"Like" forState:UIControlStateNormal];
}
是他们在一个特定单元格中更新uibutton的更好方法吗?
答案 0 :(得分:1)
根据更新信息的来源,有两种方法可以满足您的需求:
cellForRowAtIndexPath:
。通常,#1是要走的路。当新信息进入您的UITableViewController
时,请执行以下操作之一:
reloadData
强制刷新整个表格。reloadRowsAtIndexPaths:withRowAnimation:
传递正确的索引路径值。在其中任何一种情况下,您都可以在tableView:cellForRowAtIndexPath:
方法的某个位置正确设置按钮。通常,我创建我的UITableViewCell
子类来接受一个对象并使用该对象中的数据配置自己。这样,我的UITableViewController
中处理单元格配置的代码就越少。
tableView:cellForRowAtIndexPath:
的典型实现如下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
Cell *cell = [tableView dequeueReusableCellWithIdentifier:@"item" forIndexPath:indexPath];
[cell configureForItem:self.dataSource[indexPath.row]];
return cell;
}
每个UITableViewCell
实例都有自己的按钮,该按钮将由self.dataSource[indexPath.row]
中对象传递的数据进行配置。这样,当细胞被回收时,按钮不仅仅会被传递,而是每次需要新细胞时都会回收并配置一个新按钮。
答案 1 :(得分:0)
猜测,如果没有看到更多代码,我会说你的问题是使用indexPath.section而不是indexPath.row
如果每个部分有多个按钮,则此代码将覆盖所有按钮。