自定义UITableViewCell中的UITextField的resignFirstResponder

时间:2013-01-30 00:35:30

标签: xcode uitableview uitextfield

我像这样创建表格单元格(它是第一部分的第一个单元格,也是唯一一个带有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正常工作。

我应该注意,桌子足够大,在显示键盘时需要滚动,但小到足以在键盘不显示时适合屏幕。

此外,如果表格向下滚动,直到单元格不再显示在屏幕上,如果我弹出视图,也会出现错误。

我想保持桌子可滚动,我知道我可以关掉它。

有关如何阻止错误出现的任何想法,但没有让应用程序感到不稳定或不动画?其他一切正常:数据保存,数据显示,响应者,我没有崩溃等等。

我知道这不是一个严重错误,我可以让它成为现实,但我仍然希望没有错误:)

谢谢。

0 个答案:

没有答案