获取 UITableView 滚动到选定的 UITextField 并避免被键盘隐藏

2024-04-25

我有一个UITextField在表视图中UIViewController (not a UITableViewController)。 如果表视图位于UITableViewController,表格会自动滚动到textField被编辑以防止它被键盘隐藏。但在一个UIViewController它不是。

我已经尝试了几天阅读多种方法来尝试实现这一目标,但我无法让它发挥作用。实际滚动的最接近的东西是:

-(void) textFieldDidBeginEditing:(UITextField *)textField {

// SUPPOSEDLY Scroll to the current text field

CGRect textFieldRect = [textField frame];
[self.wordsTableView scrollRectToVisible:textFieldRect animated:YES];

}

但是,这只会将表格滚动到最上面一行。 看似简单的任务,却经历了几天的挫折。

我使用以下内容来构造 tableView 单元格:

- (UITableViewCell *)tableView:(UITableView *)aTableView
    cellForRowAtIndexPath:(NSIndexPath *)indexPath {

NSString *identifier = [NSString stringWithFormat: @"%d:%d", [indexPath indexAtPosition: 0], [indexPath indexAtPosition:1]];

UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:identifier];

    if (cell == nil) {

        cell = [[[UITableViewCell alloc] 
        initWithStyle:UITableViewCellStyleDefault 
        reuseIdentifier:identifier] autorelease];

        cell.accessoryType = UITableViewCellAccessoryNone;

        UITextField *theTextField = [[UITextField alloc] initWithFrame:CGRectMake(180, 10, 130, 25)];

        theTextField.adjustsFontSizeToFitWidth = YES;
        theTextField.textColor = [UIColor redColor];
        theTextField.text = [textFieldArray objectAtIndex:indexPath.row];
        theTextField.keyboardType = UIKeyboardTypeDefault;
        theTextField.returnKeyType = UIReturnKeyDone;
        theTextField.font = [UIFont boldSystemFontOfSize:14];
        theTextField.backgroundColor = [UIColor whiteColor];
        theTextField.autocorrectionType = UITextAutocorrectionTypeNo;
        theTextField.autocapitalizationType = UITextAutocapitalizationTypeNone;
        theTextField.clearsOnBeginEditing = NO;
        theTextField.textAlignment = UITextAlignmentLeft;

        //theTextField.tag = 0;
        theTextField.tag=indexPath.row;

        theTextField.delegate = self;

        theTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
        [theTextField setEnabled: YES];

        [cell addSubview:theTextField];

        [theTextField release];


}

return cell;
}

我怀疑如果我能以某种方式通过indexPath.row in the textFieldDidBeginEditing method?

任何帮助表示赞赏。


在我的应用程序中,我成功地使用了以下组合contentInset and scrollToRowAtIndexPath像这样:

当您想显示键盘时,只需在底部添加一个 contentInset ,并将表格设置为所需的高度:

tableView.contentInset =  UIEdgeInsetsMake(0, 0, height, 0);

然后就可以放心使用了

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:cell_index inSection:cell_section] animated:YES];

通过添加 contentInset,即使您专注于最后一个单元格,tableView 仍然能够滚动。只需确保在关闭键盘时重置了 contentInset。

EDIT:
如果您只有一个部分(您可以替换cell_section与 0) 并使用 textView 标签来通知单元格行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 UITableView 滚动到选定的 UITextField 并避免被键盘隐藏 的相关文章

  • 使用 Xcode 5 在装有 iOS 5.1.1 的设备中运行 iOS 应用程序

    我正在尝试在运行 iOS 5 1 1 的 iPad 上安装 iOS 应用程序 当我使用带有开发配置文件的 Xcode 启动它时 出现以下错误 Xcode 无法安装或启动支持 64 位的应用程序 运行 iOS 6 0 之前版本的设备上的架构
  • 区分 AccessoryView 和 Cell Content 上的点击,Apple 会允许吗?(iPhone)

    我想知道是否有一个委托方法可以实现 让我区分单元格内容视图上的点击和右侧的公开符号 我想根据用户点击单元格的位置将用户发送到两个不同的视图 我认为该事件通常是通过测试 tableView 是否为以下内容来捕获的 自行编辑 我只记得在闹钟和地
  • 没有名为 objc 的模块

    我正在尝试将 cocoa python 与 Xcode 一起使用 但它总是会出现错误 Traceback most recent call last File main py line 10 in
  • 如何解决警告“没有明确的所有权”

    我有一种方法 它采用间接指针作为参数 然后 如果出现错误 将其设置为错误对象 我正在尝试打开尽可能多的警告 但其中之一 Implicit ownership types on out parameters 在此方法中生成警告 id doWi
  • 代码签名身份 <名称> 与任何有效的、未过期的代码签名证书不匹配

    我希望有人能帮我解决这个令人抓狂的问题 我和我的朋友正在开发一个 mac 商店应用程序 托管在 github 上 一个月前 我们使用他的开发中心帐户从他的机器上发布了该应用程序 我最近将源代码从 github 拉到我的机器上 以进行更新 但
  • UIScreen 屏幕始终返回 1 个屏幕

    我正在尝试在不使用镜像模式的情况下通过 Airplay 在 Apple TV 上显示图片 但当镜像关闭时 UIScreen Screens 方法始终返回 1 个屏幕 主屏幕 我希望我的图片显示与照片应用程序相同 Airplay 无需镜像 N
  • Firebase 的 Xcode 编译错误

    我刚刚将 Firebase 框架安装到 Xcode 由于存在其他无法解决的问题 没有使用 CocoaPods 我按照 Firebase 替代设置说明进行操作here https www firebase com docs ios alter
  • 为什么 Swift UITableViewController 模板在 tableView cellForRowAtIndexPath 方法中使用可选参数?

    如果您创建新的 UITableViewController 类 您将看到重写的注释方法 override func tableView tableView UITableView cellForRowAtIndexPath indexPat
  • iOS 中的设备兼容性问题

    我们上传了一个应用程序 在第一个版本中 我们添加了设备功能 电话 以限制信息 plist 中的 iPhone 设备 在第二个版本中 我们忘记添加 电话 并提交给了应用商店 我们计划上传第三个版本 其中设备功能为 电话 但在提交到 App S
  • 如何更改 Xcode 上的导航器字体大小

    有什么办法可以改变xcode中导航器面板的字体大小吗 我已设法使用 首选项 gt 字体和颜色 更改编辑窗口中的字体大小 但这不会更改导航器的字体大小 适用于 Xcode 12 及以上版本 Its default value is match
  • 在 iOS 9 上,所有 uitableviewcell 的高度都变成一行

    我有一个带有多个 UITableView 控制器的应用程序 在 iOS 8 x 上运行 每个表格中所有单元格的高度将调整大小以适合单元格的内容 所有单元格仅包含纯文本的 UILabel 现在 在 iOS 9 上运行时 每个表格上的每个单元格
  • 在不滚动的情况下对 UITableViewCell 的高度变化进行动画处理

    我知道如何使用此处所示的方法对 UITableViewCell 的高度变化进行动画处理 当 UITableViewCell 被选中时 你能用动画来改变高度吗 https stackoverflow com questions 460014
  • 在 Xcode 上创建配置文件

    我正在尝试在 iPhone 上调试应用程序 Xamarin Forms 我已经在我的 Windows PC 上安装了 Visual Studio 我正在其上编写应用程序 并在我的 Mac 上安装了 Visual Studio 和 Xcode
  • 如何跳过压缩一张 PNG?

    注意 我已经解决了这个问题 但花了很长时间才在这里发布问题 答案 Xcode 构建过程在构建时 优化 我的 PNG 这通常不是问题 但以这种方式处理的 iTunesArtwork 会导致其损坏 以致 iTunes 无法显示它 我怎样才能防止
  • 如何测试包含应用程序是否授予“允许完全访问”权限?

    我正在开发一个键盘扩展项目 在应用程序代码的某些点 我需要测试用户是否已授予键盘扩展的 允许完全访问 权限 协议是我需要从应用程序端进行这些测试 并在此基础上让用户访问键盘设置或在未授予权限的情况下提醒他 问题是这里提供的方法如下 func
  • 在自定义 UITableView 中显示空白 UITableViewCell

    我正在尝试自定义 UITableView 到目前为止 看起来不错 但是当我使用自定义 UITableViewCell 子类时 当只有 3 个单元格时 我不会得到空白表格单元格 替代文本 http img193 imageshack us i
  • iPhone - UITextView 应该看起来像 UITextField

    我需要一个文本字段 以便用户可以编写多行 不幸的是 UITextField 不提供多行 所以我想我必须使用 UITextView 但两者的设计并不相同 是否可以像 UITextfield 标准一样设计具有白色背景和圆角的 UITextVie
  • 发布到 Firebase 时,单元格会重复多次

    我正在制作一个可以发布消息的应用程序 我将数据存储在 Firebase 中 当我发布新消息时 该特定单元格会重复多次 因此我会看到该帖子 2 3 4 次或更多次 但这只是 Firebase 中的一篇文章 当我刷新屏幕 例如对数据进行排序 时
  • 如何在 XCode 4 中特定类中特定属性的“objectAtIndex:”方法上设置断点?

    我想在特定类中特定属性的 objectAtIndex 方法上设置符号断点 请参阅以下代码 interface Foo property strong nonatomic NSMutableArray fooArray end 我尝试过以下操
  • UITableView更改标题标题颜色

    我正在设计 UITableView 的样式应用内设置工具包 http InAppSettingsKit并想要更改标题的颜色 标签Without title and Text Field应该是白色的 如何才能做到这一点 Thanks 这是一个

随机推荐