0

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

一个这样的单元是使用当前位置单元。其下方的第二个单元格是另一个 SELECT YOUR CITY 单元格,它调用 UIPicker。

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

所以我尝试添加这一行:

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

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

4

2 回答 2

0

-tableView:cellForRowAtIndexPath:设置selectionStyleUITableViewCellSelectionStyleNone或者您在界面生成器中执行此操作(目标是避免选择蓝色/或灰色)

-(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];
    }
}
于 2013-08-22T15:40:15.627 回答
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];
于 2013-08-22T16:32:44.107 回答