iPad没有辞职响应者

时间:2010-10-22 10:50:17

标签: iphone ipad uitableview uitextfield uiresponder

我有一个表,其中3个UITextFields添加到单元格的内容视图中(每个部分1行)。我插入了第4部分,以便我可以将特定字段滚动到键盘上方。

我遇到的问题(仅在iPad上)是当其中一个文本字段具有firstResponder时,当用户点击另一个字段时,它不会放弃它。 ipad上的响应链是否存在差异?在我的视图控制器的波纹管代码中,UITextFieldDelegate - 在触摸另一个字段时不会调用textFieldShouldEndEditing。按下完成按钮按预期工作(除非触摸了另一个字段)。

代码有什么问题吗?

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    if (!_editing++) {
        [self.tableView insertSections:[NSIndexSet indexSetWithIndex:4] withRowAnimation:UITableViewRowAnimationNone];
    }

    // scroll to section number in the text fields tag
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:textField.tag] atScrollPosition:UITableViewScrollPositionTop animated:YES];

    return YES;
}

- (void) textFieldDidBeginEditing:(UITextField *)textField {
    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:textField action:@selector(resignFirstResponder)] autorelease]; 
}

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    if (_editing-- == 1) {
        // 
        [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:4] withRowAnimation:UITableViewRowAnimationNone];
    }

    self.navigationItem.rightBarButtonItem = nil;

    // do something with the text here...

    return YES;
}

1 个答案:

答案 0 :(得分:0)

好的,我找到了一个令人满意的解决方法,它似乎允许在动画删除部分的请求之前执行运行循环来修复问题。我猜这是一个苹果虫?对于担心这个问题的其他人 - 我在iPad上运行iOS3.2.1。

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    if (_editing == 1) {
        [self performSelector:@selector(hideFinalSection) withObject:nil afterDelay:0.0f];
    }
    else {
        _editing--;
    }

    self.navigationItem.rightBarButtonItem = nil;

        // do something with the text here...

    return YES;
}

- (void) hideFinalSection {
    if (!(--_editing)) { 
        [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:4] withRowAnimation:UITableViewRowAnimationNone];
    }
}