为什么我的tableview没有调用didselectrowatindexpath直到第二次触摸?

时间:2014-01-17 03:31:34

标签: ios objective-c uitableview popviewcontrolleranimated

我有一个包含自定义行的父表视图,每个视图都推送一个视图控制器,其中包含tableview个可选选项,这些选项存储为父视图控制器的属性。我的代码:

- (void) tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
  /*
    CrewPositions *selectedPosition = (self.crewPositionList)[indexPath.row];
    [self.delegate childCrewPositionDidSelect:selectedPosition];
    NSLog(@"child Selected Position: %@", selectedPosition.title);
    [[self navigationController] popViewControllerAnimated:YES];
  */
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;

    CrewPositions *selectedPosition = (self.crewPositionList)[indexPath.row];
    self.selectedCrewPosition = selectedPosition;
    NSLog(@"self.selectedCrewPosition: %@", self.selectedCrewPosition);
    selectedFlightHistory.crewPosition = selectedPosition;
    NSLog(@"self.selectedFlightHistory.crewPosition: %@", selectedFlightHistory.crewPosition.title);

    [self.delegate childCrewPositionDidSelect:selectedPosition];

    NSLog(@"Popping view to parent");
    [self.navigationController popViewControllerAnimated:YES];
}

工作正常,遗憾的是,在我第二次点击单元格列表之后才会调用方法didSelectRowAtIndexPath。当我这样做时,它将先前选择的第一行传递给父视图。忽略大量NSLog,只记录变量正在做什么。

2 个答案:

答案 0 :(得分:9)

将您的didDeselectRowAtIndexPath方法重命名为didSelectRowAtIndexPath

第二次调用它,因为您选择了另一个单元格并取消选择前一个单元格

答案 1 :(得分:2)

这是因为您写错了方法名称。当行 de - 被选中时,会发送didDeselectRowAtIndexpath:

因此,更改方法名称didSelectRowAtIndexPath:以便实现适用于正确的委托方法。