我在表格视图 didSelect 方法和 prepareForSegue 方面遇到了问题。我在我的应用中使用了 SWRevealController 。在选择单元格时,它会显示视图。 有时无法正常使用。需要两次点击才能显示视图。几个月前,我使用了包含执行块动作的旧显示视图框架。它工作得很好。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
for (int i=0; i<6; i++)
{
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
if (i == indexPath.row)
{
cell.contentView.backgroundColor = [UIColor colorWithRed:KColorRedSelected green:KColorGreenSelected blue:KColorBlueSelected alpha:1];
}
else
{
cell.contentView.backgroundColor = [UIColor colorWithRed:KColorRed green:KColorGreen blue:KColorBlue alpha:1];
}
}
}
答案 0 :(得分:1)
在didSelectRowAtIndexPath
和didDeselectRowAtIndexPath
函数
dispatch_async(dispatch_get_main_queue(), ^{
//Write code what you need
});
这适合我。
答案 1 :(得分:0)
问题在于这一行
[self tableView:tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
您正在调用委托方法,该方法将可重用单元格出列(我假设,因为它是标准行为)。您不希望将可重复使用的单元格出列,您希望对当前显示在indexPath
的单元格执行某些操作。为此,请使用UITableView
[tableView cellForRowAtIndexPath:indexPath];
完整代码
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// grab the selected cell and give it selected color
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.contentView.backgroundColor = [UIColor colorWithRed:KColorRedSelected green:KColorGreenSelected blue:KColorBlueSelected alpha:1];
}
- (void)tableView:(UITableView*)tableView didDeselectRowAtIndexPath:(NSIndexPath*)indexPath
{
// grab the deselected cell (if it's still visible) and give it deselected color
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.contentView.backgroundColor = [UIColor colorWithRed:KColorRed green:KColorGreen blue:KColorBlue alpha:1];
}
您还需要在UITableViewDelegate
方法cellForRowAtIndexPath
中设置适当的颜色,因为您设置的颜色会在重复使用时保留在单元格中。
答案 2 :(得分:-1)
这是获取点击单元格的完全错误的方法
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
也不要使用for循环。而不是这个你应该使用
UITableViewCell *cell = [tableView cellForIndexPath:indexPath];
获得正确的细胞。