Tableview Cell需要两次点击才能显示视图

时间:2017-08-01 11:16:54

标签: ios objective-c swrevealviewcontroller

我在表格视图 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];
        }
    }
}

3 个答案:

答案 0 :(得分:1)

didSelectRowAtIndexPathdidDeselectRowAtIndexPath函数

中添加此代码
    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];

获得正确的细胞。