我有一个透明的表格视图(带有子视图 UIImageView 的 UIViewController 和位于 UIImageView 同级顶部的另一个子视图 UITableView,其背景=clearColor,UITableViewCells 背景=clearColor)。我还希望点击单元格以在复选标记和无之间切换单元格的accessoryType。如果我在 tableView:didSelectRowAtIndexPath: 中修改UITableViewCell的accessoryType,有时(30-50%的时间,在ios4.1模拟器上和运行os4.1的3GS iphone上)当从accessoryType None切换到accessoryType时,选中复选标记图像是在不透明的白色背景而不是透明背景上绘制的。相反,如果我重新加载表格(其中还为每个单元格正确设置了accessoryType),则透明度在100%的情况下都能正常工作。
这是一个错误吗?或者修改 tableView:didSelectRowAtIndexPath: 中的单元格不是正确的做法,应该重新加载该行?还是我还缺少其他东西?
编辑:这是我的 didSelectRowAtIndexPath 代码,显示了不良行为:
编辑2:发生的事情的更多细节。问题发生在取消选择动画的最后端。当取消选择动画运行并且蓝色选择逐渐淡出时,复选标记会出现并正确且透明地显示。取消选择动画完成且蓝色全部消失后,也许在选择颜色完全消失后 1/10 秒,复选标记附件“自动”变为不透明,无需进一步的用户输入。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if ( self.editing )
{
}
else
{
[self.myTableView deselectRowAtIndexPath:indexPath animated:YES];
UITableViewCell *cell = [self.myTableView cellForRowAtIndexPath:indexPath];
// toggle the selection status of the selected row
//
NSNumber *rowObj = [NSNumber numberWithUnsignedInt:indexPath.row];
if ( [self.selectedRows containsObject:rowObj] )
{
// currently selected, now de-select
//
cell.accessoryType = UITableViewCellAccessoryNone;
[self.selectedRows removeObject:rowObj];
}
else
{
// currently unselected, now select
//
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[self.selectedRows addObject:rowObj];
}
}
}
我认为如果你移动它会更干净切换选择一段代码
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
and on didSelectRowAtIndexPath拨电至
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
这样,您将在选择行后立即重新加载所选行,而无需调用 reloadData。
希望这可以帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)