Могу ли я создавать приложения RubyMotion с помощью Interface Builder?
Ruby Motion только что вышло, и скринкаст, похоже, ничего не говорит о том, можете ли вы использовать Interface Builder для создания своего интерфейсы и интегрировать их в проект RubyMotion. Возможно ли это? Или у меня действительно есть код все вручную, не говоря уже о поддержке разных частей кода для iPhone/iPad?
Моя репутация недостаточно высока, чтобы создать тег rubymotion, поэтому, пожалуйста, помогите, если это необходимо.
Ответы
Ответ 1
Я хотел бы отметить, что RubyMotion 1.3 теперь поддерживает автоматическую компиляцию файлов .xib
, которые вы помещаете в папку resources
. Итак, теперь рабочий процесс становится следующим:
- Создайте файл
.xib
с помощью XCode (не нужно создавать проект, просто используйте File | New... | File) и сохраните его в папке resources
. Поскольку пока не поддерживается поддержка торговых точек, будьте осторожны, чтобы установить свойство tag
для каждого элемента управления, который вы хотите использовать в своем коде (вы найдете в листе свойств каждого компонента в заголовке "Вид" ).
- RubyMotion позаботится о компиляции вашего файла
.xib
в файл .nib
, поэтому наслаждайтесь:)
- В вашем производном классе
UIViewController
загрузите nib, используя loadNibNamed:owner:options:
, как показано ниже.
- В
viewDidLoad
извлеките различные компоненты с помощью viewWithTag:
и добавьте обработчики событий, используя addTarget:action:forControlEvents:
, как показано ниже.
-
В качестве бонуса, в следующий раз, когда вы захотите отредактировать свой xib, просто сделайте open resources/MyView.xib
, он запустит только хорошие части XCode.
class CalculatorViewController < UIViewController
def loadView
views = NSBundle.mainBundle.loadNibNamed "Keyboard", owner:self, options:nil
self.view = views[0]
end
def viewDidLoad
button = view.viewWithTag 1
button.addTarget self, action:'buttonTapped:', forControlEvents:UIControlEventTouchUpInside
end
def buttonTapped(button)
# ...
end
end
Ответ 2
Да, вы можете использовать Interface Builder в RubyMotion.
Файлы .xib, которые находятся в каталоге ресурсов, автоматически скомпилируются в файлы .nib и доступны для вашего проекта.
Есть даже способ поддерживать розетки, если вы так склонны:
https://github.com/yury/ib#readme
http://ianp.org/2012/05/07/rubymotion-and-interface-builder/
Ответ 3
Но если вы действительно хотите использовать IB, вы все равно можете использовать его, чтобы выложить свой интерфейс и просто позвонить
NSBundle.mainBundle.loadNibNamed(MY_NIB_NAME, owner:self, options:nil)
или аналогичный. Я не думаю, что RubyMotion использует любое имя, чтобы вы могли использовать свои рубиновые классы в IB, явно устанавливая их.
Ответ 4
Возможно, вы можете создать интерфейс в IB и вызвать инструменты командной строки для компиляции XIB в NIB.
Однако вы не сможете подключать розетки или назначать действия, потому что IB не может анализировать исходные файлы Ruby для токенов IBOutlet
и IBAction
. Обычно код загрузки NIB делает эти подключения для вас после загрузки вашего NIB. Вы должны сделать это сами, в коде.
Из двух вопиющих недостатков RubyMotion мне это хуже всего. (Другим является то, что отсутствие завершения кода сделает запись в API Cocoa действительно утомительной.)
Ответ 5
У капучино была та же проблема. Они разработали инструмент под названием XcodeCapp: https://github.com/cappuccino/cappuccino/tree/master/Tools/XcodeCapp
Он создает файлы "dummy" Obj-C, которые вы можете подключить к своим точкам и действиям в IB, автоматически анализирует их в фоновом режиме и позволяет использовать IB для компоновки ваших пользовательских интерфейсов Cappuccino.
С RubyMotion можно использовать аналогичный подход (если вы действительно хотите использовать IB).
Ответ 6
Есть кто-то, кто сделал это:
Вот учебное видео: https://www.youtube.com/watch?v=cOapNvehbg4
И это веб-сайт https://github.com/yury/ib
Extra-Tipp: Чтобы найти обертки для rubymotion, проверьте этот источник
http://rubymotion-wrappers.com/
Надеюсь, что это поможет