我已经在我的应用程序中的UITextFields上实现了标准的“下一个”功能(按next将移动到下一个相应的文本字段)。大部分时间这种方法运行良好,并将移动到适当的文本字段没有问题。但是在某些情况下,由于某些原因,当我要求它成为第一个响应者时,textField将返回NO,我不知道为什么。
有关textfields / view的一些信息:
视图有多个UITableViews,其中一些UITableViewCells有UITextfields我想成为其中的第一响应者,其他人则没有。 创建表时,我遍历主视图子视图以查找所有第一响应者并将它们添加到第一响应者数组(_firstResponders - 变量名称)。 当需要下一个响应者时,每个单元通过代理回调到主视图。
以下是我用来获取下一个响应者的代码:
//get the current first responders index
NSInteger currentIndex = [_firstResponders indexOfObject:currentResponder];
// if the current index plus 1 is less than the overall count of first responders on this view then continue, else resign the responder as no more are avilable
if((currentIndex+1) < [_firstResponders count])
{
// get the potential next responder
UIResponder *nextResponder = [_firstResponders objectAtIndex:currentIndex+1];
// if it can become the first responder assign it,
// else callback into this function with the unavilable first responder
if([nextResponder canBecomeFirstResponder])
{
[currentResponder resignFirstResponder];
BOOL becomeFirstResponder = [nextResponder becomeFirstResponder];
if(becomeFirstResponder == NO)
{
DLog(@"TextField at index: %d has returned no to becoming first responder", (currentIndex+1));
}
}
else
[self getNextResponder:nextResponder];
}
else
[currentResponder resignFirstResponder];
}
正如您所看到的,我检查它是否可以成为代码中的第一个响应者,我还检查了文本字段是否已手动启用(我还在将响应者添加到响应者数组时进行检查)。还值得一提的是,我检查了数组大小,并在发生这种情况时设置了响应者并且它们是正确/有效的。
对我而言,最奇怪的部分是,如果我在设置新响应者之前没有在当前响应者上调用resignFirstResponder,我之前只看过这个。
有谁知道它返回NO的原因/我如何解决这个问题?
提前致谢!