0

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

但我无法让“以前的”文本字段成为FirstResponder。

我已经在控制台中进行了检查,并且文本字段确实调用了 textFieldShouldBeginEditing 并且我返回 YES,但它从不调用 textFieldDidBeginEditing,并且应该 resignFirstResponder 的文本字段从不调用 textFieldShouldEndEditing。

因此,文本字段正在获取成为成为FirstResponder 的消息,但没有。

- (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,那么“以前的”文本字段会突然变成 FirstResponder。就像它被添加到响应者列表中一样,轮到它了……

4

2 回答 2

0

就像发生奇怪事情时经常发生的情况一样,这与成为第一响应者无关。我不小心通过文本字段委托在一堆逻辑中间将我的 activeTextfield 指针更改为 nil。^o^

漠视!

于 2012-08-13T02:40:46.573 回答
-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];
于 2012-07-20T18:59:07.643 回答