我有一个UITableView
,其中包含一大堆自定义UITableViewCells
。其中每个UITableViewCells
都包含UITextView
。
我遇到的问题是,如果用户触摸UITextView
,则会成为第一个响应者并弹出键盘。如果用户然后向下滚动到屏幕上不再显示第一个应答器所在的UITableViewCell
的位置,则无法通过UITextView
将其解除。
我已经尝试持有(并保留)对UITextView
的引用,但是一旦它离开屏幕并且我尝试访问它,我会得到EXC_BAD_ACCESS
。无论我保留多少次都会发生这种情况,所以我怀疑它可能是直接调用dealloc(我不确定单元格出列系统是如何工作的)。
另一个奇怪的事情是,如果我滚动UITextField
关闭屏幕,键盘仍可用于写入,当我滚动回UITextField
时,键入的文本可见。
非常感谢任何帮助。
答案 0 :(得分: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在其时间消失之前就被解除了问题。
答案 1 :(得分:0)
您可以保存用户正在编辑的单元格的indexPath。然后,当他滚动测试该单元是否在tableView的可见单元格中时。如果没有从该单元格中获取文本字段并关闭键盘。
UITableViewCell *editingCell = [self.tableView cellForRowAtIndexPath:SavedIndexPath];
[editingCell.textField resignFirstResponder];