我已经实现对UITextFields标准的“下一个”功能在我的应用程序(按未来你会移动到下一个适当的文本字段)。 大多数的这种运作良好,并会移动到相应的文本框没有问题的时间。 但是对某些原因几次的文本框将不返回时,我问它成为第一个响应者,我不知道为什么。
有关文本框/视图的一些信息:
视图有多个UITableViews,一些这些的UITableViewCells有我想成为第一个响应者在他们的UITextfields,有的则没有。 当表i循环创建通过主视图子视图,找到所有的第一响应,并将它们添加到第一应答者(_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在当前应答。
有谁知道它没有返回的原因/我是如何解决这一问题?
提前致谢!