UITableView 没有在 becomeFirstResponder 上滚动

Posted

技术标签:

【中文标题】UITableView 没有在 becomeFirstResponder 上滚动【英文标题】:UITableView not scrolling on becomeFirstResponder 【发布时间】:2015-11-13 23:28:58 【问题描述】:

我知道关于这个主题有很多关于堆栈溢出的问题,但我无法找到我的具体问题的答案。我有一个包含多个部分的 UITableView。每个单元格都有一个 UITextField,它被赋予一个标签。在我的 textFieldShouldReturn 函数中,我有一个 switch 语句,它调用下一个单元格的 textField 以成为基于它的标签的第一响应者。

- (BOOL)textFieldShouldReturn:(UITextField *)textField 

switch (textField.tag) 
    case FIRST_NAME_FIELD_TAG:
        [_catv.lastNameTextField becomeFirstResponder];
        break;
    case LAST_NAME_FIELD_TAG:
        [_catv.emailTextField becomeFirstResponder];
        break;
    case EMAIL_FIELD_TAG:
        [_catv.passwordTextField becomeFirstResponder];
        break;
    case PASSWORD_FIELD_TAG:
        [_catv.phoneNumberTextField becomeFirstResponder];
        break;
    case PHONE_NUMBER_FIELD_TAG:
        [_catv.phoneNumberTextField resignFirstResponder];
        [self createAccount];
        break;
    default:
        break;

return NO;

一切正常,直到我到达单元格位于键盘下方(不可见)的地步。然后返回似乎没有做任何事情,尽管它被调用了。如果我手动滚动到下一个单元格,那么该单元格才会成为第一响应者。我希望让单元格自动在键盘上方滚动。我认为问题可能是每个部分开头的分隔标题视图,但我无法判断。任何见解都会非常有帮助。

【问题讨论】:

【参考方案1】:

可能不是最佳解决方案,但是由于 UITableView 继承了 UIScrollView,您是否考虑过以编程方式滚动到适当的单元格然后分配响应者?

或许可以试试:

[_tableView scrollRectToVisible:CGRectMake(X,Y,WIDTH,HEIGHT)
                           animated:YES];

【讨论】:

我最终选择了 scrollToRowAtIndexPath,得到了 textField 所在单元格的 indexPath,但想法相同。

以上是关于UITableView 没有在 becomeFirstResponder 上滚动的主要内容,如果未能解决你的问题,请参考以下文章

UITableView,UILabel 文本颜色在选择行时没有改变? [关闭]

为啥这个 UIView 没有出现在 UITableView 前面?

在 UITableView 上 reloadData 后文本字段没有被选中

UITableView 在 segmentedControlChanged 上没有改变

UITableView 滚动条没有拉伸

UITableview 没有在 iOS 中使用自动布局调整大小