如何根据UITableView中的用户交互调用特定的单元格选择

时间:2013-08-22 15:21:12

标签: ios uitableview

我有一个桌面视图,用户点击几个单元格,根据点击,该单元格中的图像被突出显示的图像替换,让用户知道它已被选中。

一个这样的单元格是USE CURRENT LOCATION单元格。其下方的第二个单元格是另一个调用UIPicker的SELECT YOUR CITY单元格。

我想要的是,如果用户点击USE CURRENT LOCATION单元格(图像被高亮显示的图像替换),但如果用户点击SELECT YOUR CITY单元格以调出拾取器,我需要将第一个细胞图像设置回正常状态。这样我告诉用户“使用当前位置”已被自动禁用,因为您正在手动选择城市。

所以我尝试添加这一行:

//Deselect Row 1
            [tableView deselectRowAtIndexPath:1 animated:YES];

案例2中的didSelectRowAtIndexPath内部(因为案例0是带有图像的单元格)

2 个答案:

答案 0 :(得分:0)

-tableView:cellForRowAtIndexPath:中将selectionStyle设置为UITableViewCellSelectionStyleNone或者您在界面构建器中执行此操作(目标是避免选择蓝色/灰色)

-(UITableViewCell *)tableView:(UITableView *)tableView 
        cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"SomeCellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (!cell){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault     
                                      reuseIdentifier:CellIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    // Configure your cell

    return cell;
}

然后在-tableView:didSelectRowAtIndexPath:中自定义行为:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath *useCurrentLocationCellIndexPath = [NSIndexPath indexPathForRow:1 
                                                                      inSection:0];
    NSIndexPath *pickCityCellIndexPath = [NSIndexPath indexPathForRow:2 
                                                            inSection:0];
    if ([indexPath compare:useCurrentLocationCellIndexPath] == NSOrderedSame) {
        // The "use current location" cell was selected. Change the image to the highlighted image
        [tableView cellForRowAtIndexPath:indexPath].imageView.image = highlightedImage;
    } else if ([indexPath compare:pickCityCellIndexPath] == NSOrderedSame) {
        // The "pick city" cell was selected. Change the image to normal one. And show the picker using your code.
        [tableView cellForRowAtIndexPath:useCurrentLocationCellIndexPath].imageView.image = normalImage;
        //[self showCityPicker];
    }
}

答案 1 :(得分:0)

我最终使用了:

//Deselect Row 1 - only highlights it
            NSIndexPath* selectedCellIndexPath= [NSIndexPath indexPathForRow:1 inSection:0];
            [self.tableView selectRowAtIndexPath:selectedCellIndexPath animated:false scrollPosition:UITableViewScrollPositionMiddle];
            [self tableView:self.tableView didSelectRowAtIndexPath:selectedCellIndexPath];