问题 iOS 8自定义键盘


我正在尝试构建一个自定义键盘,它就像一个表情符号键盘,但键盘的数据来自一个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 ) ノ゙",
                "(。◕ˇ∀ˇ◕)",
                "(¯﹃¯)"
            ]
        }
    ]
}

12180
2018-06-21 09:03


起源

只是你必须遵循扩展指南。它也像你正在使用UIVIewController,所以这样想,并设置你的用户界面。首先从服务器获取数据,解析并创建UI,我建议删除self.nextKeyboardButton或隐藏使用按钮切换键盘。 - Ravee10
@Ravee10就像我削减json文件那部分代码一样?但它似乎不起作用。 - yong ho
..请记住扩展不像应用程序..没有nsrunloop和UIAplication一直运行来监听网络响应所以使用静态数据。 - Ravee10
改为使用plist :-) - Fogmeister
这是一个很好的教程: verisage.us/blog/2014/07/17/... - Spentak


答案:


您可以通过单击新文件 - >视图来构建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)我觉得如果你为键盘api构建一个JSON真是太棒了 您将键盘地图的JSON发送到您的应用程序 并且应用程序知道如何相应地在inputView上排列键

如果您构建此项目,请告诉我们!

编辑:

4)你需要做的大部分工作是解析JSON并从JSON uibuttons显示你想要的内容,并决定他们在文本字段中插入什么文本

看看这个问题: 如何在swift中解析JSON文件?

祝你好运!


12
2018-06-29 21:41



我知道了。但我要问的是为什么解析json部分不起作用? - yong ho
@yongho - 你可以发布JSON吗? - nurxyz
@nurme请看更新的问题。 - yong ho
@yongho - 我回答你的问题了吗? :d - nurxyz


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

关于 表情符号,它不是真实的图像,它们只是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


3
2018-06-23 12:24



由于这个原因,Apple拒绝了我的键盘:----- 25.6 -----我们发现您的键盘扩展名不包括Number和Decimal类型,这些类型不符合App Store评论指南。具体来说,缺少Number和Decimal键盘限制了用户可以执行的任务范围,这可能会造成糟糕的用户体验。 ----------------你知道如何在我的自定义键盘中添加另一个视图来提供这个吗?或者另一种方法可以使用指南?非常感谢 ! - ababab5