检测自定义键盘扩展中的输入对象视图类型

时间:2014-08-19 11:45:16

标签: ios objective-c ios8 ios-app-extension custom-keyboard

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

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

这样的事情:

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

问题是:如何检测当前正在编辑的输入视图类型?

3 个答案:

答案 0 :(得分:2)

无需检测输入视图是UITextField还是UITextView才能输入新行

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

[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则不执行。

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

尝试这样的方法,将活动视图引用为' inputViewObject',然后尝试

- (void) returnKeyPressed
{

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

希望它有所帮助。