3

我有一个 UITableViewController 显示 50 个项目。这是一个简单的表格视图,它使用 value1 单元格类型。当我点击一行时,我向该单元格添加了一个 UITextField(它具有用于调试的亮绿色背景)。在这一点上,我还没有让它成为第一响应者。现在,如果我滚动表格视图,一切正常。正如人们所预料的那样,带有亮绿色文本字段的单元格被出列并重复使用,并随机出现在其他单元格中。

当我将该文本字段设置为第一响应者时,会发生两件有趣的事情。

  1. 我可以整天滚动,并且该单元格永远不会出队和重用。
  2. tableView:cellForRowAtIndexPath: 永远不会为具有作为第一响应者的文本字段的单元格调用。

就像从池中拉出牢房一样。一旦文本字段不是第一响应者,事情就会恢复正常。

以下是相关代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"indexPath= %@", indexPath);
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
    }

    cell.textLabel.text =[NSString stringWithFormat:@"Label %@", self.items[indexPath.row]];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    [cell addSubview:self.textFieldForEditing];
    //[self.textFieldForEditing becomeFirstResponder];
}

我如何使文本字段成为第一响应者并不重要。我是否取消注释 didSelectRowAtIndexPath: 中的行或点击文本字段。无论哪种方式,相同的行为。

从某种角度来看,这种行为很方便。没有必要实施出队管理代码来防止文本字段出现在不应该出现的地方。

但我在任何地方都找不到这种行为。这是正常的吗?

4

0 回答 0