2016-01-19 3 views
2

Я пытаюсь сделать простое расширение клавиатуры iOS с помощью Swift. UIView по умолчанию не отвечал моим потребностям, поэтому я прочитал this Вопрос о том, что я мог бы использовать раскадровку с свойством NSExtensionMainStoryboard в info.plist.Пользовательская клавиатура iOS с раскадрой

К сожалению, каждый раз, когда я открываю клавиатуру, я получаю следующие ошибки

2016-01-18 18:02:56.350 Kappa Keyboard[44790:2959180] Failed to inherit CoreMedia permissions from 44787: (null) 
2016-01-18 18:02:56.368 Kappa Keyboard[44790:2959138] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil' 
*** First throw call stack: 
(
    0 CoreFoundation      0x002f1746 __exceptionPreprocess + 182 
    1 libobjc.A.dylib      0x01d32a97 objc_exception_throw + 44 
    2 CoreFoundation      0x001a6ce1 -[__NSArrayM insertObject:atIndex:] + 881 
    3 CoreFoundation      0x001a6941 -[__NSArrayM addObject:] + 65 
    4 UIKit        0x00c7d0bd -[UIViewController _addChildViewController:performHierarchyCheck:notifyWillMove:] + 417 
    5 UIKit        0x00c968aa -[UIViewController(UIContainerViewControllerProtectedMethods) addChildViewController:] + 78 
    6 UIKit        0x01206db8 -[_UIViewServiceViewControllerOperator __createViewController:withContextToken:fbsDisplays:appearanceSerializedRepresentations:legacyAppearance:traitCollection:initialInterfaceOrientation:hostAccessibilityServerPort:canShowTextServices:replyHandler:] + 2702 

Трассировка стека продолжается, но это суть его.

Вот все, что я сделал (я пробовал это в чистом проекте).

  1. Создание контейнера приложения
  2. Создание целевой клавиатуры
  3. Добавить Main.storyboard
  4. Добавить NSExtension.NSExtensionMainStoryboard: Main в info.plist
  5. Set Main.storyboard «s пользовательский класс по умолчанию KeyboardViewController

Любая идея, что мне не хватает?

ответ

1

Добавить раскадровки файл в целевой клавиатуры.
В общей вкладке цели вашей клавиатуры сделайте Main Interface в свой файл раскадровки, как на скриншоте.
Вторая важная часть - убедиться, что ваш классвида взглядов не указан UIInputView вместо UIView в раскадровке.

enter image description here

1

У меня есть собственное приложение для клавиатуры тоже. Вот шаги:

Objective-C

  1. создать целевую клавиатуру
  2. создать файл XIb в целевом расслоении (MyKeyboard.xib)
  3. создать какао сенсорного класса выберите UIView (MyKeyboard.h MyKeyboard.m)
  4. внутри KeyboardViewController.m, импорт MyKeyboard.h
  5. внутри KeyboardViewController.m, add

@property (nonatomic, strong) MyKeyboard *myKeyboard; 

ViewDidLoad:

self.myKeyboard = [[MyKeyboard alloc]init]; 
self.myKeyboard = [[[NSBundle mainBundle] loadNibName: @"MyKeyboard" 
            owner:self option:nil] objectAtIndex:0]; 
self.inputView = (UIInputView *)self.myKeyboard; 

Swift

  1. создать целевой клавиатуры
  2. создать интерфейс UIView (XIB файл) в целевом расслоению (MyKeyboard.xib)
  3. создать какао сенсорный класса выберите UIInputView (MyKeyboard.swift)
  4. внутри KeyboardViewController.скор добавить

// здесь

override func viewDidLoad() { 
    super.viewDidLoad() 
    // setup your keyboard 
    self.myKeyboard = NSBundle.mainBundle().loadNibNamed("MyKeyboard", owner: self, options: nil)[0] as! MyKeyboard 
    self.inputView = self.myKeyboard; 

    // Perform custom UI setup here 
    self.nextKeyboardButton = UIButton(type: .System) 
    self.nextKeyboardButton.setTitle(NSLocalizedString("Next Keyboard", comment: "Title for 'Next Keyboard' button"), forState: .Normal) 
    self.nextKeyboardButton.sizeToFit() 
    self.nextKeyboardButton.translatesAutoresizingMaskIntoConstraints = false 
    self.nextKeyboardButton.addTarget(self, action: "advanceToNextInputMode", forControlEvents: .TouchUpInside) 

    self.myKeyboard.addSubview(self.nextKeyboardButton) // add the button to self.myKeyboard!! 

    let nextKeyboardButtonLeftSideConstraint = NSLayoutConstraint(item: self.nextKeyboardButton, attribute: .Left, relatedBy: .Equal, toItem: self.view, attribute: .Left, multiplier: 1.0, constant: 0.0) 
    let nextKeyboardButtonBottomConstraint = NSLayoutConstraint(item: self.nextKeyboardButton, attribute: .Bottom, relatedBy: .Equal, toItem: self.view, attribute: .Bottom, multiplier: 1.0, constant: 0.0) 
    self.view.addConstraints([nextKeyboardButtonLeftSideConstraint, nextKeyboardButtonBottomConstraint]) 
} 

Вот что это будет выглядеть как enter image description here

+0

Я ценю вашу тщательность, но я ищу раскадровки на основе клавиатуры, а не .xib файл. – Harangue

Смежные вопросы