如何同时获取所选 UITextField 的键盘大小和 CGFrame 大小?

卡洛斯·M。

我正在运行时动态填充UIScrollView具有许多UITextField字段的垂直我遇到的问题是键盘会隐藏它出现的区域中的字段,这可能包括我正在编辑的字段。

我尝试了 Apple 文档中的KeyboardManagement解决方案,并尝试在textFieldDidBeginEditing上使用通知textFieldDidEndEditing但在这两种情况下的问题是,keyboardWillShow有时通知首先出现,在这种情况下,它不会让我知道哪个字段是正在编辑的字段。

我在一个实现UITextFieldDelegate协议的类中有这段代码,这个类的每个对象都持有对这些字段之一的引用,并作为委托工作

func textFieldDidBeginEditing(_ textField: UITextField) {
    self.activeTextfield = self.valueTextField
}

func textFieldDidEndEditing(_ textField: UITextField) {
    self.activeTextfield = nil
}

activeTextfield变量是弱引用的变量UIViewController,所有这一切都发生。在该视图控制器中,我有以下代码

class MyClass: UIViewController {
    var activeTextfield: CustomTextField! // This is the variable I was talking about on the previous paragraph

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        NotificationCenter.default.removeObserver(self)
    }

    @objc func keyboardWillShow(_ notification: Notification) {
        if self.view.frame.origin.y == 0 {
            guard let userInfo = notification.userInfo else { return }
            guard let keyboardSize = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }

            let keyboardFrame = keyboardSize.cgRectValue
            let textFieldFrame = activeTextfield!.frame // activeTextfield sometimes is nil because this notification happens before the previous code block

            if textFieldFrame.origin.y + textFieldFrame.size.height > keyboardFrame.origin.y {
                self.view.frame.origin.y -= keyboardFrame.height
            }
        }
    }

    @objc func keyboardWillHide(_ notification: Notification) {
        if self.view.frame.origin.y != 0 {
            guard let userInfo = notification.userInfo else { return }
            guard let keyboardSize = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }

            let keyboardFrame = keyboardSize.cgRectValue

            self.view.frame.origin.y += keyboardFrame.height
        }
    }
}

有什么方法可以强制UITextField在键盘通知之前调用委托方法?

这是处理这种情况的正确方法吗?

如果不是,我应该如何处理?

谢谢

斯瓦普尼尔·卢克图克

如您的问题所述:

在这两种情况下的问题是,keyboardWillShow 通知有时首先出现,在这种情况下,它不会让我知道哪个字段是正在编辑的字段

根据苹果文档中描述的事件序列textFieldShouldBeginEditing是调用的第一个委托方法。

这样你就可以

  1. textFieldShouldBeginEditing在委托中实现以设置您的活动文本字段,而不是textFieldDidBeginEditing(确保您return true从 textFieldShouldBeginEditing 允许编辑)
  2. 使用keyboardDidShowNotification代替keyboardWillShowNotification.

这将确保您UITextField在获取键盘框架/详细信息之前标记。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何调整UITextField.leftView的大小?

来自分类Dev

如何设置UILabel或UITextField文本的大小的动画?

来自分类Dev

如何调整Google虚拟键盘的大小和位置?

来自分类Dev

UITextField调整大小问题

来自分类Dev

如何根据使用的iPhone使UITextField适当调整其大小?

来自分类Dev

如何在Swift中根据用户类型调整UITextField的大小

来自分类Dev

如何根据使用的iPhone使UITextField适当调整其大小?

来自分类Dev

如何在Swift中根据用户类型调整UITextField的大小

来自分类Dev

如何确定包含光标的 UITextField 内文本的大小?

来自分类Dev

如何使键盘与视图大小相同

来自分类Dev

如何检测键盘类型随新键盘类型的大小,类型和建议栏高度的变化?

来自分类Dev

同时获取文件大小和行数

来自分类Dev

内容和失去焦点时的UITextField字体大小

来自分类Dev

从键盘通知获取UITextField

来自分类Dev

iOS UITextField自动调整大小符合内容

来自分类Dev

更改UIAlertView中的UITextField的字体大小

来自分类Dev

设置文本时停止调整UITextField的大小

来自分类Dev

在UIAlertView中更改UITextField的字体大小

来自分类Dev

UITextField-以编程方式调整UIView的大小

来自分类Dev

如何减少磁盘的大小和大小?

来自分类Dev

通过建议栏快速获取键盘大小

来自分类Dev

获取JFileChooser中所选文件的大小和名称?

来自分类Dev

获取JFileChooser中所选文件的大小和名称?

来自分类Dev

如何使约束自动调整大小和重新放置横向键盘键

来自分类Dev

如何根据键盘大小正确实现缩小和扩展视图?

来自分类Dev

如何基于TextField的可见大小限制UITextField的输入文本量?

来自分类Dev

获取表格的大小和边框

来自分类Dev

如何获取tableView和tabBar之间的大小?

来自分类Dev

在Flutter标签栏中,所选标签栏的大小和标签栏的大小无法对齐。如何对齐?

Related 相关文章

  1. 1

    如何调整UITextField.leftView的大小?

  2. 2

    如何设置UILabel或UITextField文本的大小的动画?

  3. 3

    如何调整Google虚拟键盘的大小和位置?

  4. 4

    UITextField调整大小问题

  5. 5

    如何根据使用的iPhone使UITextField适当调整其大小?

  6. 6

    如何在Swift中根据用户类型调整UITextField的大小

  7. 7

    如何根据使用的iPhone使UITextField适当调整其大小?

  8. 8

    如何在Swift中根据用户类型调整UITextField的大小

  9. 9

    如何确定包含光标的 UITextField 内文本的大小?

  10. 10

    如何使键盘与视图大小相同

  11. 11

    如何检测键盘类型随新键盘类型的大小,类型和建议栏高度的变化?

  12. 12

    同时获取文件大小和行数

  13. 13

    内容和失去焦点时的UITextField字体大小

  14. 14

    从键盘通知获取UITextField

  15. 15

    iOS UITextField自动调整大小符合内容

  16. 16

    更改UIAlertView中的UITextField的字体大小

  17. 17

    设置文本时停止调整UITextField的大小

  18. 18

    在UIAlertView中更改UITextField的字体大小

  19. 19

    UITextField-以编程方式调整UIView的大小

  20. 20

    如何减少磁盘的大小和大小?

  21. 21

    通过建议栏快速获取键盘大小

  22. 22

    获取JFileChooser中所选文件的大小和名称?

  23. 23

    获取JFileChooser中所选文件的大小和名称?

  24. 24

    如何使约束自动调整大小和重新放置横向键盘键

  25. 25

    如何根据键盘大小正确实现缩小和扩展视图?

  26. 26

    如何基于TextField的可见大小限制UITextField的输入文本量?

  27. 27

    获取表格的大小和边框

  28. 28

    如何获取tableView和tabBar之间的大小?

  29. 29

    在Flutter标签栏中,所选标签栏的大小和标签栏的大小无法对齐。如何对齐?

热门标签

归档