我像这样创建表格单元格(它是第一部分的第一个单元格,也是唯一一个带有textField的单元格):
if (indexPath.section == 0 && indexPath.row == 0) {
GroupedTableViewCellWithTextField *cell = (GroupedTableViewCellWithTextField *) [tableView dequeueReusableCellWithIdentifier: nameCellIdentifier];
if (!cell && !_nameCell) {
cell = [[GroupedTableViewCellWithTextField alloc] initWithStyle: UITableViewCellStyleValue1
reuseIdentifier: nameCellIdentifier];
cell.textField.delegate = self;
if (!_adding)
cell.textField.text = @"Some Text";
_nameCell = cell;
}
if (!cell) {
cell = _nameCell;
}
return cell;
}
textField由简单的
创建- (UITextField *)textField {
if (!_textField) {
CGRect rect = self.bounds;
CGFloat cellWidth = rect.size.width;
CGFloat cellHeight = rect.size.height;
CGRect cellRect = CGRectMake(rect.origin.x + 15, rect.origin.y, cellWidth - 48, cellHeight);
_textField = [[SSTextField alloc] initWithFrame: cellRect];
_textField.textColor = self.textLabel.textColor;
_textField.placeholderTextColor = [UIColor grayColor];
_textField.placeholder = @"Name";
_textField.backgroundColor = [UIColor clearColor];
_textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
_textField.textAlignment = UITextAlignmentCenter;
_textField.returnKeyType = UIReturnKeyDone;
_textField.alpha = 1.0f;
[_textField becomeFirstResponder];
[self.contentView addSubview:_textField];
}
return _textField;
}
然后我有:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if ([_nameCell.textField isFirstResponder]) {
[_nameCell.textField resignFirstResponder];
return YES;
}
问题如下:如果我向下滚动,直到带有textField的单元格不在屏幕上并且我resignFirstResponder,我得到
no index path for table cell being reused
但只有一次。如果我用textField触摸单元格内部,它的textField再次获得firstResponder,然后再次向下滚动并resignFirstResponder,我再次没有得到该错误...它只显示第一次。
如果我
[self.tableView scrollToRowAtIndexPath: [NSIndexPath indexPathForRow: 0 inSection: 0]
atScrollPosition: UITableViewRowAnimationTop
animated: YES];
滚动太慢了,我仍然得到错误。如果我这样做非动画,我不再得到错误,因为单元格显示得比调用resignFirstResponder更快;但它看起来很丑陋。
我还试图在
上使用resignFirstResponder-(void)scrollViewDidScroll:(UIScrollView *)scrollView
和
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
所以它在单元格离开视图之前发生,但是动画不稳定:滚动开始,然后在键盘开始向下移动时停止一秒钟,然后再次开始。
为了清楚起见,resignFirstResponder正常工作。
我应该注意,桌子足够大,在显示键盘时需要滚动,但小到足以在键盘不显示时适合屏幕。
此外,如果表格向下滚动,直到单元格不再显示在屏幕上,如果我弹出视图,也会出现错误。
我想保持桌子可滚动,我知道我可以关掉它。
有关如何阻止错误出现的任何想法,但没有让应用程序感到不稳定或不动画?其他一切正常:数据保存,数据显示,响应者,我没有崩溃等等。
我知道这不是一个严重错误,我可以让它成为现实,但我仍然希望没有错误:)
谢谢。