UITextView不会resignFirstResponder,所以另一个可以成为FirstResponder

时间:2012-07-20 18:41:48

标签: objective-c ios ios5 uitextfield becomefirstresponder

我在UITextfields的inputAccessoryView中有一个工具栏。如果点击“下一个”按钮,它会使我所有文本字段的orderedSet中的下一个文本字段成为第一个响应者。这很完美。

但我无法将'previous'文本字段变为firstFirstResponder。

我已经在控制台中检查过,textfield确实调用了textFieldShouldBeginEditing,我返回YES,但它从不调用textFieldDidBeginEditing,而resignFirstResponder的文本字段从不调用textFieldShouldEndEditing。

因此,textfield将消息发送到firstFirstResponder但不是。

- (IBAction)keyboardBarButtonDidTouch:(UIBarButtonItem *)sender
{
    if (sender==self.previousBarButton&&self.activeTextFieldArrayIndex.intValue>0)
    {
        [(UITextField *)[self.textfields objectAtIndex:(self.activeTextFieldArrayIndex.intValue-1)] becomeFirstResponder];
    }
    if (sender==self.nextBarButton&&self.activeTextFieldArrayIndex.intValue<(self.textfields.count-1))
    {
        [(UITextField *)[self.textfields objectAtIndex:(self.activeTextFieldArrayIndex.intValue+1)] becomeFirstResponder];
    }
    if (sender==self.doneBarButton)
    {
        [self.activeTextField resignFirstResponder];
    }
}

最奇怪的是,如果我通过某种操作强制文本字段resignFirstResponder,那么'previous'文本字段突然变为FirstResponder。就像它被添加到响应者列表中一样,轮到它......

2 个答案:

答案 0 :(得分:0)

通常情况下,奇怪的事情发生时,与成为第一响应者无关。我通过textfield委托意外地将一个逻辑中间的activeTextfield指针改为nil。 ^ O ^

否认!

答案 1 :(得分:-2)

1)尝试使代码不易出错。

而不是

if(sender==self.previousBarButton&&self.activeTextFieldArrayIndex.intValue>0)

这样做

if ((sender==self.previousBarButton) && (self.activeTextFieldArrayIndex.intValue>0))

2)使用textfield.tag属性并为这些文本字段设置唯一标记。并使用

做关于成为/辞职第一个应答器的事情
(uitextfield *)field[self viewWithTag: uniqueTag];