Подтвердить что ты не робот

Могу ли я создавать приложения RubyMotion с помощью Interface Builder?

Ruby Motion только что вышло, и скринкаст, похоже, ничего не говорит о том, можете ли вы использовать Interface Builder для создания своего интерфейсы и интегрировать их в проект RubyMotion. Возможно ли это? Или у меня действительно есть код все вручную, не говоря уже о поддержке разных частей кода для iPhone/iPad?

Моя репутация недостаточно высока, чтобы создать тег rubymotion, поэтому, пожалуйста, помогите, если это необходимо.

4b9b3361

Ответ 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).

  • Johannes