ошибка сортировки нативного скрипта

Кажется, у меня возникает странная проблема при маршалинге следующего собственного кода iOS в nativescript:

CGRect keyboardRect = CGRectMake(0, 0, self.view.frame.size.width, 216);
AGEmojiKeyboardView *emojiKeyboardView = [[AGEmojiKeyboardView alloc] initWithFrame:keyboardRect
                                                                           dataSource:self];
emojiKeyboardView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
emojiKeyboardView.delegate = self;
self.textView.inputView = emojiKeyboardView;

Эквивалент, который я придумал, следующий:

var keyboardRect = CGRectMake(0, 0, platform.screen.mainScreen.widthPixels, 216);
var emojiKeyboardView = new AGEmojiKeyboardView();
emojiKeyboardView.frame = keyboardRect;
emojiKeyboardView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
emojiKeyboardView.delegate = this;
views.textInput.ios.inputView = emojiKeyboardView;

где платформа — это просто require("platform");, а views.textInput — это представление, для которого мне нужно установить для inputView значение AGEmojiKeyboardView.

Я действительно не понимаю, где я ошибся. Все, что появляется, — это серая клавиатура без содержимого.

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

Я изменил код js на следующий:

var keyboardRect = CGRectMake(0, 0, uiView.view.frame.size.width, 216);
var emojiKeyboardView = new AGEmojiKeyboardView(keyboardRect, uiView);
emojiKeyboardView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
emojiKeyboardView.delegate = uiView;
views.textInput.ios.inputView = emojiKeyboardView; 

где uiView — это просто page.ios, и сейчас что-то вроде бы происходит, но все еще не соответствует ожидаемому результату. Выбрасывается исключение, а именно следующее: -[UIViewControllerImpl emojiKeyboardView:imageForSelectedCategory:]: unrecognized selector sent to instance 0x7e6bff60


person user1494162    schedule 06.06.2016    source источник


Ответы (2)


Поскольку NativeScript имеет TypeScript в качестве первоклассного члена, кое-что действительно проще сделать с TS. Например, вы также можете использовать META-генератор Просто запустите эти две строки, чтобы сгенерировать метаданные и типы для вашего CocoaPod (и всех других файлов Objective-C), и вам не придется беспокоиться о правильном синтаксисе (тем не менее, вам нужно знать основные правила)

TNS_DEBUG_METADATA_PATH="$(pwd)/metadata" tns build ios [--for-device] [--release]

TNS_TYPESCRIPT_DECLARATIONS_PATH="$(pwd)/typings" tns build ios [--for-device] [--release]

Кроме того, если вы хотите создать собственное представление, лучшим вариантом будет использование NativeScript placeholder с creatingView.

Что касается синтаксиса, он должен быть похож на этот, но все же вам придется создать свой собственный ViewController и, как говорит автор, соответствовать AGEmojiKeyboardViewDataSource и Протокол AGEmojiKeyboardViewDelegate.

var frame = require('ui/frame');
var page;

function onLoaded(args) {
     page = args.object;

}
exports.onLoaded = onLoaded;

function onCreatingView(args) {
    setTimeout(function() {
        var uiView = page.ios.view; // replace with own UIView and conform to AGEmojiKeyboardViewDataSource and AGEmojiKeyboardViewDelegate protocol.

        var frame = {origin: {x:0, y:0}, size: {width: uiView.frame.size.width, height:600}};
        var emojiView = AGEmojiKeyboardView.alloc().initWithFrameDataSource(frame, uiView);
        emojiView.autoresizingMask = UIView.UIViewAutoresizing.UIViewAutoresizingFlexibleHeight;
        emojiView.delegate = uiView;

        var textContainer = NSTextContainer.alloc().initWithSize({width: 80, height: 180});

        var frame = {origin: {x:0, y:0}, size: {width: 100, height:220}};
        var textView = UITextView.alloc().initWithFrameTextContainer(frame, textContainer);
        textView.inputView = emojiView;

        args.view = textView;
    }, 500);
}
exports.onCreatingView = onCreatingView;

страница.xml

<Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="onLoaded">
  <StackLayout>
        <Placeholder creatingView="onCreatingView" id="placeholder-view"/>
  </StackLayout>
</Page>
person Nick Iliev    schedule 07.06.2016
comment
Я не знал, что могу генерировать машинописные тексты для Cocoapods. Это действительно интересно, спасибо за совет! Я проверю ваше решение и надеюсь, что оно сработает! - person user1494162; 08.06.2016
comment
ваше предложение изменить TNS_METADATA_PATH и TNS_TYPESCRIPT_DECLARATIONS_PATH создает повторяющийся идентификатор для всего в папке типов. - person RyeGuy; 10.01.2018

Я могу ошибаться, но я не думаю, что вы правильно используете сортировку.

В документации указано:

AGEmojiKeyboardView *emojiKeyboardView = [[AGEmojiKeyboardView alloc] initWithFrame:keyboardRect dataSource:self];

Итак, ваша версия {N} должна быть примерно такой:

var emojiKeyboardView = AGEmojiKeyboardView.alloc().initWithFrameDataSource(keyboardRect, uiView);

Это отличный пост в блоге о том, как создавать плагины на основе сторонних библиотек для нативного скрипта. В нем также пошагово объясняется, как выполняется этот тип сортировки. http://fluentreports.com/blog/?p=167

person Manijak    schedule 07.06.2016
comment
Привет, спасибо за ваш ответ. Я попробую и дам вам знать - person user1494162; 08.06.2016