UITextfield becomeFirstResponder返回NO

我已经在我的应用程序中实现了UITextFields上的标准“下一个”function(按下一步将移动到下一个适当的文本字段)。 大多数情况下,这种方式运行良好,并将转移到适当的文本框没有问题。 但是由于某些原因,textField在我要求它成为第一响应者的时候会返回NO,我不知道为什么。

关于textfields / view的一些信息:

该视图有多个UITableViews,其中一些UITableViewCells有UITextfields我想成为他们的第一响应者,其他人不。 创build表时,我通过主视图子视图循环查找所有第一响应者,并将其添加到第一响应者数组(_firstResponders – variables名)。 当需要下一个响应者时,每个单元通过一个委托callback到主视图。

以下是我用来获得下一个响应者的代码:

//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]; } 

正如你所看到的,我检查它是否可以成为代码中的第一响应者,并且我也检查了文本字段是否是手动启用的(我也在将响应者添加到响应者数组的时候进行检查)。 还值得一提的是我已经检查了arrays大小和响应者设置发生这种情况,他们是正确的/有效的。

对我来说最奇怪的部分是我以前只有在设置新的响应者之前没有在当前响应者上调用resignFirstResponder时才看到这个。

有谁知道它返回的原因没有/我该如何解决这个问题?

提前致谢!