2012-05-04 12 views
22

Ruby Motion acaba de salir, y el screencast no parece decir nada acerca de si puede usar Interface Builder para construir sus interfaces e integrarlas en su proyecto RubyMotion. ¿Es posible tal cosa? ¿O realmente tengo código todo a mano, sin mencionar mantener diferentes códigos para iPhone/iPad?¿Puedo crear aplicaciones RubyMotion con Interface Builder?

Mi representante no es lo suficientemente alto como para crear una etiqueta rubymotion, así que por favor ayuda si es necesario.

+2

probar esto http://ianp.org/2012/ 05/07/rubymotion-and-interface-builder/ – Andrei

Respuesta

38

Sólo me gustaría señalar que RubyMotion 1.3 ahora soporta compilación automática de .xib archivos que usted pone en la carpeta resources. Así que ahora el flujo de trabajo se convierte en:

  1. crear el archivo .xib utilizando XCode (sin necesidad de crear un proyecto, sólo tiene que utilizar Archivo | Nuevo ... | File) y guardarlo en la carpeta resources. Como todavía no hay soporte para los puntos de venta, tenga cuidado de configurar la propiedad tag para cada control que quiera usar en su código (lo encontrará en la hoja de propiedades de cada componente bajo el encabezado "Ver").
  2. RubyMotion se encargará de compilar su archivo en un archivo .xib.nib, así que disfruta :)
  3. En su clase derivada UIViewController, cargar la punta usando loadNibNamed:owner:options:, como se muestra a continuación.
  4. En viewDidLoad, busque sus diversos componentes usando viewWithTag: y agregue manejadores de eventos usando addTarget:action:forControlEvents:, como se muestra a continuación.
  5. Como beneficio adicional, la próxima vez que desee editar su xib, solo haga open resources/MyView.xib, solo lanzará las partes buenas de 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 
    
+0

Aquí hay un proyecto de muestra que utiliza esta técnica: [MotionCalc] (https://github.com/nlehuen/MotionCalc) –

+0

puede que desee echarle un vistazo a esto también: http://ianp.org/ 2012/05/07/rubymotion-and-interface-builder / – hutch

1

Pero si realmente desea utilizar IB entonces se podría probablemente todavía lo utilizan para diseñar la interfaz de usuario y simplemente llamar

NSBundle.mainBundle.loadNibNamed(MY_NIB_NAME, owner:self, options:nil) 

o similar. No creo que RubyMotion haga ningún cambio de nombre, así que puedes usar tus clases de ruby ​​en IB al configurarlas explícitamente.

+0

tal vez podría decir un poco más acerca de cómo compilar un XIB en un NIB para usar en un proyecto de RubyMotion. esa parece ser la parte difícil ... –

+0

Puedes simplemente usar 'ibtool'. La parte difícil es conectar los puntos de venta y las acciones ya que no puede usar las funciones de arrastrar y soltar de XCode. –

+0

Intenté hacer eso, pasando las opciones '--compile' y' --flatten NO', pero sigue arrojando una 'NSInternalInconsistencyException' hacia mí. Lo estaba cargando con 'myViewController.alloc.initWithNibName (" MyViewController ", paquete: nil)' ¿Cómo funciona exactamente 'ibtool' para obtener un archivo de punta cargable? –

1

Probablemente pueda construir la interfaz en IB y llame a las herramientas de línea de comandos para compilar el XIB en un NIB.

Sin embargo, no podrá conectar tomas ni asignar acciones porque IB no puede analizar los archivos fuente de Ruby para los tokens IBOutlet y IBAction. Normalmente, el código de carga NIB hace esas conexiones para usted después de cargar su NIB. Tendrás que hacer eso tú mismo, en código.

De las dos debilidades flagrantes en RubyMotion, para mí esto es lo peor. (La otra es que la falta de finalización del código hará que escribir en Cocoa API sea realmente tedioso.)

+0

La próxima versión de la mina de rubí IDE admite el desarrollo de movimiento de rubí y la finalización automática de las API de Cocoa. Así que esto podría ayudarlo – Rubinsh

1

Cappuccino tuvo el mismo problema. Desarrollaron una herramienta llamada XcodeCapp: https://github.com/cappuccino/cappuccino/tree/master/Tools/XcodeCapp

Crea archivos Obj-C "ficticios" a los que puede conectar sus puntos de venta y acciones en IB, los analiza automáticamente en segundo plano y le permite usar IB para diseñar sus UI de Cappuccino .

Debería ser posible adoptar un enfoque similar con RubyMotion (si realmente desea usar IB).

  • Johannes
Cuestiones relacionadas