【问题标题】:Programmatically press a keyboard button以编程方式按下键盘按钮
【发布时间】:2017-02-17 04:16:21
【问题描述】:

我想知道是否有办法打开 iOs 键盘并以编程方式按下按钮而不与键盘本身交互。

【问题讨论】:

  • 您尝试“按下”哪个按钮,可能有一种方法可以调用该方法。例如,如果您尝试“按下”更改键盘按钮以切换到表情符号键盘,则有一种方法可以以编程方式调用下一个键盘出现。等
  • @AlbertRenshaw 你指的是什么方法?
  • @adrian1kat setKeyboardType:
  • @adrian1kat 您还可以将UITextInputMode 设置为您想要将用户键盘更改为的任何区域设置,其中之一是表情符号“语言”键盘。 stackoverflow.com/a/44753740/2057171

标签: ios swift


【解决方案1】:

是的,有办法。实际上有几种方法,但它们都没有记录,你绝对不应该在生产中使用它们。

生成一个水龙头意味着生成一个UIEvent(实际上是几个)并将其传递给UIApplication.sendEvent(_:)

不幸的是,UIEvent 内部结构没有记录,但有些人已经检查过它,您可以使用谷歌工具来合成事件(例如 https://github.com/n00neimp0rtant/ControlFreak)。但是请注意UIEventUITouch 的内部结构可以在iOS 版本之间改变(参见iOS 9 UIEvent

您还可以使用内部 UIAutomation API(参见例如 these generated headers)来生成点击(这是 UI 测试在以前版本中使用的),但同样,此 API 没有公开记录,它会加载到应用程序中仅当应用程序连接到 Xcode 时。我不确定这个私有框架在 iOS 9 上的样子。

【讨论】:

    【解决方案2】:

    不,没有。您可以通过响应者链向您的应用程序发送事件,但出于安全原因,只能通过触摸访问键盘。

    【讨论】:

      【解决方案3】:

      我不明白你为什么需要这样做。如果你有,让我们说一个 UITextField,然后说,

      textField.text += "a"
      

      这可以与任何东西一起使用。您无需点击键盘按钮

      【讨论】:

      • 键盘上有很多按钮,而不仅仅是输入字符。例如大写键、表情键等
      【解决方案4】:
      override func viewDidLoad() {
          super.viewDidLoad()
      
      
          textInput.becomeFirstResponder()
      
      }
      
      override func viewDidAppear(animated: Bool) {
      
          textInput.text = textInput.text ?? "" + ""
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多