2

我有UITableView一大堆自定义UITableViewCells在里面。这些中的每一个UITableViewCells都有一个UITextView

我遇到的问题是,如果用户触摸 a UITextView,它将成为 firstResponder 并且键盘弹出。如果用户随后向下滚动到UITableViewCellfirstResponder 所在的位置不再出现在屏幕上,我无法将UITextView其关闭。

我尝试持有(并保留)UITextViewEXC_BAD_ACCESS. 无论我保留多少次都会发生这种情况,所以我怀疑它可能直接调用了dealloc(我不确定单元出队系统实际上是如何工作的)。

另一个奇怪的事情是,如果我滚动UITextField屏幕外,仍然可以使用键盘对其进行写入,并且当我滚动回UITextField.

任何帮助将非常感激。

4

2 回答 2

1

Fluchtpunkt 是绝对正确的,我没有正确地重复使用我的细胞。我的问题是我正在使用以下方法从笔尖加载我的自定义 UITableViewCells:

static NSString *CellIdentifier = @"CustomCell";
ExpandingTableViewCell *cell = (ExpandingTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ExpandingTableViewCell" owner:self options:nil];
    cell = (ExpandingTableViewCell *)[nib objectAtIndex:0];
}

我没有意识到我必须将自定义单元格的 .xib 文件中的 Identifier 字段设置为 CustomCell。一旦我的单元格被正确地重新使用,UITextField 在它的时间之前被释放的问题就消失了。

于 2011-02-16T01:08:10.113 回答
0

You can save the indexPath of the cell that user is editing. Then when he scrolls test if that cell is in visible cells of the tableView. If not get the text field from that cell and dismiss the keyboard.

UITableViewCell *editingCell =  [self.tableView cellForRowAtIndexPath:SavedIndexPath];
[editingCell.textField resignFirstResponder];
于 2011-02-15T08:35:19.377 回答