的UITextField becomeFirstResponder返回NO(UITextfield

2019-10-17 16:59发布

我已经实现对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在当前应答。

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

提前致谢!

文章来源: UITextfield becomeFirstResponder returns NO