另一个关于“键盘遮住 UITextField”的问题

Posted

技术标签:

【中文标题】另一个关于“键盘遮住 UITextField”的问题【英文标题】:Another take on the "keyboard obscures UITextField" problem 【发布时间】:2010-01-09 18:17:04 【问题描述】:

我知道这是一个常见问题,并且 UITableViewController 修复了这是 iPhone SDK 3.0,但 UITableViewController 没有按我的预期工作,可能是由于我使用它的方式。这是我的问题:

我正在处理一个表单,该表单位于一个分组表中,其中包含一些文本字段。 表格下部的那些会被键盘遮住。我知道这是一个古老的问题,并且有一些自动滚动的代码示例,但我还有一点要添加,想知道是否有人发现并修复了它。

首先:从 3.0 开始,如果您的表格由 UITableViewController 控制,您会自动获得滚动。我试过了,确实有效。 但是,我想使用 UITableViewController 无法使用的自定义背景图像。这是我所做的:

    创建具有平面视图的 XIB,上面有图像。 同样在 XIB 中,我有一个 UIViewController(实际上是我自己的子类,因为我编写了数据源方法等),它有表格。 在我的主视图 viewDidLoadMethod 我试过这个: tableViewController.view.backgroundColor = [UIColor clearColor]; [self.view addSubview:tableViewController.view];

确实,该表显示为我期望的样子。 但是,当我点击表格中的文本字段时,我没有获得 tableViewController 旨在免费提供给我的“魔法”滚动。

就目前而言,这与我根本没有使用 TableViewController 的行为完全相同,而是将表直接放到 imageView 上。 (坦率地说,这减少了 1 个类,并且更易于阅读代码)。

我引入 TableViewController 的唯一原因是为了实现自动滚动。

我有什么遗漏吗?

【问题讨论】:

【参考方案1】:

调整大小;如果你想要它平滑,那么使用动画块。

[UIView beginAnimations:@"tableAnim" context:nil];
// 214 = keyboard size, adjust it if you have navigation bar or status bar
tableView.frame = CGRectMake(0, 0, 320, 480 - 214);
[UIView commitAnimations];

【讨论】:

【参考方案2】:

如果您选择表格中的最后一项,它确实无法在键盘上方滚动,因为没有足够的表格可以滚动。它会尽可能滚动,但这可能不足以使所选项目可见。

我所做的是调整表格的大小,使其在键盘上方完全可见。它没有应有的流畅,但已经足够了==每个项目都可以看到。

【讨论】:

嗨,JOM,谢谢。我最后也做了同样的事情。真的,我正在寻找一种方法来确保 UITableViewController 照顾它,所以我不必这样做。我没有找到方法,所以使用了许多用于滚动的示例。【参考方案3】:

(重复我对另一个SO 问题的回答):

我个人强烈推荐使用 Michael Tyson 的 TPKeyboardAvoiding。

它非常易于使用...(引自自述文件):

要与 UITableViewController 类一起使用,请删除 TPKeyboardAvoidingTableView.m 和 TPKeyboardAvoidingTableView.h 进入 您的项目,并使您的 UITableView 成为 TPKeyboardAvoidingTableView 在西布。如果您没有在控制器中使用 xib,我知道 没有简单的方法使其 UITableView 成为自定义类:最少的路径 阻力是为它创建一个xib。

对于非UITableViewControllers,删除 TPKeyboardAvoidingScrollView.m 和 TPKeyboardAvoidingScrollView.h 源文件到你的项目中,弹出一个 UIScrollView 到你的视图中 控制器的xib,将滚动视图的类设置为 TPKeyboardAvoidingScrollView,并将所有控件放在其中 滚动视图。您也可以通过编程方式创建它,而无需使用 xib - 只需使用 TPKeyboardAvoidingScrollView 作为您的*** 查看。

【讨论】:

以上是关于另一个关于“键盘遮住 UITextField”的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于JavaMail 使用QQ邮箱发送邮件的问。

关于easyui的问,我包没有导错,我及html形式都能显示dialog,为啥我用javascrpt方式就显示不出来呢?

详细的问PROE的配置文件设置的步骤,请高手们细详呀题说明。

如何使用命令行搜索提交消息? [复制]

在另一个窗口中显示 QProcess 输出

在另一个图像中搜索图像的算法。 (大学)