Пользовательская клавиатура iOS 8

Я пытаюсь создать пользовательскую клавиатуру, похожую на клавиатуру emoji, но данные клавиатуры взяты из файла json. После анализа этого json-файла и получения данных, как заставить пользовательскую клавиатуру использовать его и отображать в представлении клавиатуры, например встроенную клавиатуру emoji? Прямо сейчас я следую руководству App Extension Keyboard: Custom Keyboard, и здесь есть только небольшие фрагменты информации. Есть ли какой-нибудь учебник или руководство о том, как создать собственную клавиатуру с эмодзи онлайн? Текущие коды, которые я пытаюсь использовать, приведены ниже:

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 ) ノ゙",
                "(。◕ˇ∀ˇ◕)",
                "(¯﹃¯)"
            ]
        }
    ]
}

person yong ho    schedule 21.06.2014    source источник
comment
Просто вы должны следовать направляющей линии расширения. Это также похоже на то, что вы работаете с UIVIewController, поэтому подумайте об этом и настройте свой пользовательский интерфейс. Сначала извлеките свои данные с сервера, проанализируйте их и создайте свой пользовательский интерфейс, и я бы предложил удалить self.nextKeyboardButton или скрыть использование кнопки для переключения клавиатуры.   -  person Ravee10    schedule 21.06.2014
comment
@ Ravee10 Ravee10 Нравится та часть кода, в которой я обрезаю файл json? Но похоже не работает.   -  person yong ho    schedule 21.06.2014
comment
... Пожалуйста, имейте в виду, что расширение не похоже на приложение ... в нем нет nsrunloop и UIAplication, работающих все время для прослушивания ответа сети, поэтому используйте в нем статические данные.   -  person Ravee10    schedule 22.06.2014
comment
Вместо этого используйте plist :-)   -  person Fogmeister    schedule 01.07.2014
comment
Вот хороший учебник: verisage.us /блог/2014/07/17/   -  person Spentak    schedule 19.07.2014


Ответы (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) я думаю, что это потрясающе, если вы создаете API JSON для клавиатуры, вы отправляете JSON карты клавиатуры в свое приложение, и приложение знает, как соответствующим образом расположить клавиши на inputView

дайте нам знать, если вы строите этот проект!

РЕДАКТИРОВАТЬ:

4) Большая часть того, что вам нужно сделать, это проанализировать JSON и отобразить контент, который вы хотите из JSON uibuttons, а также решить, какой текст они вставляют в текстовое поле.

проверьте этот вопрос: Как быстро проанализировать файл JSON?

Удачи!

person nurnachman    schedule 29.06.2014
comment
Я понимаю. Но я спрашиваю, почему синтаксический анализ части json не работает? - person yong ho; 30.06.2014
comment
@yongho - вы можете опубликовать JSON? - person nurnachman; 30.06.2014
comment
@yongho - я ответил на твой вопрос? :D - person nurnachman; 06.07.2014

Прежде всего вам нужно создать свой пользовательский интерфейс для клавиатуры в вашем KeyboardViewController. Вам решать, как вы его настраиваете, добавляете кнопки, представления, жесты и т. д. (Кстати, высота просмотра ограничена стандартным размером высоты клавиатуры, поэтому не пытайтесь увеличить его, он не будет рисоваться) Шаблон который сгенерирован, это просто пример, чтобы показать, как вы можете поместить в него одну кнопку. После настройки пользовательского интерфейса убедитесь, что у вас есть кнопка «Следующая клавиатура», она обязательна.

Что касается Emoji, это не настоящие изображения, это просто символы юникода, которые позже были заменены системой изображениями. Таким образом, вы не можете передавать изображения, единственный ввод, который вы можете предоставить, это 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.

person User1234    schedule 23.06.2014
comment
Моя клавиатура была отклонена Apple по следующей причине: ----- 25.6 ----- Мы обнаружили, что расширение вашей клавиатуры не включает числа и десятичные числа, что не соответствует Руководству по проверке App Store. В частности, отсутствие цифровых и десятичных клавиатур ограничивает диапазон задач, которые могут выполнять пользователи, что может создать неудобства для пользователей. ---------------- Есть ли у вас какие-либо идеи, как я могу добавить еще один вид на мою пользовательскую клавиатуру, чтобы обеспечить это? Или другой способ быть в порядке с руководящими принципами? Большое спасибо ! - person ababab5; 08.10.2014