iOS 8 自定义键盘

Posted

技术标签:

【中文标题】iOS 8 自定义键盘【英文标题】:iOS 8 Custom Keyboard 【发布时间】:2014-08-11 23:11:59 【问题描述】:

我正在尝试构建一个自定义键盘,它就像一个表情符号键盘,但键盘的数据来自一个 json 文件。解析完这个json文件并获取数据后,如何让自定义键盘使用它并显示在键盘视图中,就像内置的表情符号键盘一样?现在,我遵循应用扩展键盘:自定义键盘指南,这里只有少量信息。有没有关于如何在线创建自定义表情符号键盘的教程或指南?我正在尝试的当前代码如下:

class KeyboardViewController: UIInputViewController 
    override func viewDidLoad() 
        super.viewDidLoad()

        var error: NSError?
        let yanFile = NSBundle.mainBundle().pathForResource("yan", ofType: "json")
        let yanData = NSData(contentsOfFile: yanFile) as NSData
        let yanDict = NSJSONSerialization.JSONObjectWithData(yanData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
        println("dict: \(yanDict)") //print nothing in console

        // Perform custom UI setup here
        self.nextKeyboardButton = UIButton.buttonWithType(.System) as UIButton

        self.nextKeyboardButton.setTitle(NSLocalizedString("Next Keyboard", comment: "Title for 'Next Keyboard' button"), forState: .Normal)

    

json如下:


    "list": 
    [
        
            "tag": "laugh",
            "yan": 
            [
                "o(*≧▽≦)ツ┏━┓",
                "(/≥▽≤/)",
                "ヾ(o◕∀◕)ノ"
            ]
        ,
        
            "tag": "wanna",
            "yan": 
            [
                "✪ω✪",
                "╰(*°▽°*)╯",
                "≖‿≖✧",
                ">ㅂ<",
                "ˋ▽ˊ",
                "✪ε✪",
                "✪υ✪",
                "ヾ (o ° ω ° O ) ノ゙",
                "(。◕ˇ∀ˇ◕)",
                "(¯﹃¯)"
            ]
        
    ]

【问题讨论】:

您必须遵循扩展指南。就像您正在使用 UIVIewController 一样,因此请这样思考并设置您的 UI。首先从服务器获取您的数据,解析并创建您的用户界面,我建议删除 self.nextKeyboardButton 或隐藏使用您的按钮切换键盘。 @Ravee10 喜欢我删除 json 文件的那部分代码吗?但它似乎不起作用。 ..请记住扩展不像应用程序..它没有运行 nsrunloop 和 UIAplication 来监听网络响应,所以使用静态数据。 使用 plist 代替 :-) 这里有一个很好的教程:verisage.us/blog/2014/07/17/… 【参考方案1】:

首先,您需要在 KeyboardViewController 中为键盘创建 UI。这取决于你如何自定义它,添加按钮、视图、手势等。(顺便说一下,视图的高度是有限的,标准键盘高度大小,所以不要试图让它更高它不会绘制)模板生成它只是一个示例,展示了如何在其中放置一个按钮。设置 UI 后,请确保您有 下一个键盘按钮,它是必需的。

关于Emoji,它不是真实的图像,它们只是后来被系统替换为图像的unicode字符。所以你不能传递图片,你唯一能提供的输入是 NSString [self.textDocumentProxy insertText:@"hello "]; // Inserts the string "hello " at the insertion point

更多细节可以在这里找到https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html

【讨论】:

我的键盘被苹果拒绝了这个原因: ----- 25.6 ----- 我们发现你的键盘扩展不包括数字和小数类型,不符合应用程序商店审查指南。具体来说,缺少数字和十进制键盘限制了用户可以执行的任务范围,这可能会造成糟糕的用户体验。 ---------------- 你知道如何在我的自定义键盘中添加另一个视图来提供这个吗?或者另一种可以接受指南的方法?非常感谢!【参考方案2】:

你可以通过点击新建文件->查看来构建一个xib文件

1) 在 xib 文件中创建一个 uiview 320x216,您可以将任何您想要的控件拖放到其中

2) 然后您可以像这样将笔尖加载到键盘的 inputView 中:

// Perform custom UI setup here
UIView *layout = [[[NSBundle mainBundle] loadNibNamed:@"keyboardXib" owner:self options:nil] objectAtIndex:0];
[self.inputView addSubview:layout];

3) 我认为如果你构建一个 JSON 到键盘 api 会很棒 您将键盘映射的 JSON 发送到您的应用程序 并且应用程序知道如何相应地安排 inputView 上的键

如果您构建了这个项目,请告诉我们!

编辑:

4) 您需要做的大部分工作是解析 JSON 并从 JSON uibuttons 中显示您想要的内容,并决定它们将哪些文本插入到文本字段中

看看这个问题:How to parse a JSON file in swift?

祝你好运!

【讨论】:

我明白了。但我要问的是为什么解析 json 部分不起作用? @yongho - 你能发布 JSON 吗? @yongho - 我回答你的问题了吗? :D

以上是关于iOS 8 自定义键盘的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8自定义键盘:更改高度

播放声音的 iOS 8 自定义键盘

iOS 8 自定义键盘扩展 UIKeyboardType

ios 8自定义键盘UIViewServiceInterfaceErrorDomain?

使用 iOS 8 自定义键盘发送图像?

自定义键盘应用程序扩展 iOS 8 上的 Siri