我有一个需要自定义UITableViewCellAccessoryCheckmark的表视图。选中标记将在选中某行时显示,而选中另一行则消失,然后出现在最后一个选中的视图上。很好
使用此行时出现问题:
cell.accessoryView = [[ UIImageView alloc ]
initWithImage:[UIImage imageNamed:@"icon-tick.png" ]];
添加自定义UITableViewCellAccessoryCheckmark。该代码之后,UITableViewCellAccessoryCheckmark保留在所有行上,并且在触摸另一行时不会消失。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
int index = indexPath.row; id obj = [listOfItems objectAtIndex:index];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
NSLog(@"%d",indexPath.row);
if (rowNO!=indexPath.row) {
rowNO=indexPath.row;
[self.tableView cellForRowAtIndexPath:indexPath].accessoryType=UITableViewCellAccessoryCheckmark;
cell.accessoryView = [[ UIImageView alloc ]
initWithImage:[UIImage imageNamed:@"icon-tick.png" ]];
[self.tableView cellForRowAtIndexPath:lastIndexPth].accessoryType=UITableViewCellAccessoryNone;
lastIndexPth=indexPath;
}
最佳答案
一种更干净更酷的方法是像这样覆盖UITableViewCell:
- (void)setAccessoryType:(UITableViewCellAccessoryType)accessoryType
{
// Check for the checkmark
if (accessoryType == UITableViewCellAccessoryCheckmark)
{
// Add the image
self.accessoryView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"YourImage.png"]] autorelease];
}
// We don't have to modify the accessory
else
{
[super setAccessoryType:accessoryType];
}
}
如果这样做,您可以继续使用
UITableViewCellAccessoryCheckmark
,因为您的 class 将自动用图像替换它。您只应在
cellForRowAtIndexPath
方法中设置样式。像这样:- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// [init subclassed cell here, dont forget to use the table view cache...]
cell.accessoryType = (rowNO != indexPath.row ? nil : UITableViewCellAccessoryCheckmark);
return cell;
}
然后,您只需要更新
rowNO
中的didSelectRowAtIndexPath
即可更新数据并重新绘制单元格,如下所示:- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (rowNO != indexPath.row)
{
rowNO = indexPath.row;
}
[self.tableView reloadData];
}
另外,除了使用
[self.tableView reloadData]
重新加载整个表格外,您只能使用reloadRowsAtIndexPaths
重新加载更改其样式(例如,选中标记)的两个单元格。关于iphone - 如何显示自定义UITableViewCellAccessoryCheckmark,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14382322/