2

我正在使用 iOS 8 中的应用程序扩展开发自定义键盘。

我有一个返回键,按下时我想检查输入对象是否为UITextView,然后使用以下代码移至下一行[self.textDocumentProxy insertText:@"\n"];:如果输入对象是UITextField,则以这种方式关闭键盘:[self dismissKeyboard];

像这样的东西:

- (void) returnKeyPressed
{
    if (inputObjectIsTextView)
    {
        [self.textDocumentProxy insertText:@"\n"];
    }
    else if (inputObjectIsTextField)
    {
        [self dismissKeyboard];
    }
}

问题是:如何检测当前正在编辑哪种输入视图?

4

3 回答 3

2

无需检测输入视图是一个UITextField还是UITextView输入一个新行

如标题“自定义键盘的 API 快速入门”下所述

[self.textDocumentProxy insertText:@"\n"];   // In a text view, inserts a newline character at the insertion point

那就是不需要检测了,可以这样做

- (void) returnKeyPressed
{
    [self.textDocumentProxy insertText:@"\n"];
}

如果 inputView 是,这将执行UITextView,如果输入类型是,则不执行UITextField

我已经创建了一个键盘并在此处发布之前对其进行了测试。

于 2014-08-19T18:24:19.820 回答
1

你不能这样做,如果你查看文档,你会发现没有用于检测键盘扩展文本输入对象的公共 API。

从医生。因为自定义键盘只能在其UIInputViewController对象的主视图中绘制,所以它不能选择文本。文本选择由使用键盘的应用程序控制。如果该应用程序提供了编辑菜单界面(例如用于剪切、复制和粘贴),则键盘无法访问它

我认为这也意味着您无法从使用键盘扩展的应用程序访问文本输入对象。

于 2014-08-19T16:07:41.707 回答
0

尝试这样的事情,将活动视图引用为“inputViewObject”,然后尝试

- (void) returnKeyPressed
{

    if (inputViewObject.class==[UITextView class])
    {
        [self.textDocumentProxy insertText:@"\n"];
    }
    else if (inputViewObject.class==[UITextField class])
    {
        [self dismissKeyboard];
    }
}

希望能帮助到你。

于 2014-08-19T11:53:26.773 回答