2012-05-04 116 views
22

Ruby Motion刚刚出来,屏幕录像似乎没有说明是否可以使用Interface Builder来构建接口并将它们集成到RubyMotion项目中。这样的事情可能吗?或者我是否真的拥有一切代码,更不用说维护iPhone/iPad的不同代码了?我可以使用Interface Builder构建RubyMotion应用程序吗?

我的代表不够高,无法创建rubymotion标签,因此请在适当情况下提供帮助。

+2

试试这个http://ianp.org/2012/ 05/07/ruby​​motion-and-interface-builder/ – Andrei

回答

38

我只是想指出,RubyMotion 1.3现在支持的,你投入resources文件夹中的文件.xib自动编译。所以,现在的流程变为:

  1. 使用的XCode创建.xib文件(无需创建一个项目,只需使用文件|新建... |文件),并将其保存到文件夹resources。由于目前还没有对插座的支持,请注意为代码中要使用的每个控件设置tag属性(您可以在“View”标题下的每个组件的属性表中找到)。
  2. RubyMotion会照顾你的编译文件.xib.nib文件的,所以享受:)
  3. 在你UIViewController派生类中,加载使用loadNibNamed:owner:options:笔尖,如下图所示。
  4. viewDidLoad中,使用viewWithTag:获取各种组件,并使用addTarget:action:forControlEvents:添加事件处理程序,如下所示。
  5. 作为奖励,下次你想编辑你的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 
    
+0

下面是一个使用这种技术的示例项目:[MotionCalc](https://github.com/nlehuen/MotionCalc) –

+0

也许也想看看这个:http://ianp.org/ 2012/05/07/ruby​​motion-和接口建设者/ – hutch

1

但是,如果你真的想使用IB那么你仍然可以或许用它来布置您的用户界面并调用

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

或相似。我认为RubyMotion没有任何名称可以改变,所以你可以在IB中使用你的ruby类,方法是明确地设置它们。

+0

也许你可以多说一些关于如何将XIB编译到NIB中以用于RubyMotion项目的问题?这似乎是棘手的部分... –

+0

你可以使用'ibtool'。棘手的部分是连接插座和操作,因为您不能使用XCode的拖放功能。 –

+0

我试过这样做,传递选项'--compile'和'--flatten NO',但它一直抛出一个'NSInternalInconsistencyException'给我。我正在用'myViewController.alloc.initWithNibName(“MyViewController”,bundle:nil)加载它' 你究竟如何运行'ibtool'来获得一个可加载的nib文件? –

1

您可能可以在IB中构建接口并调用命令行工具将XIB编译为NIB。

但是,由于IB无法解析IBOutletIBAction令牌的Ruby源文件,因此您无法连接插座或分配操作。通常,NIB加载代码会在加载您的NIB后为您建立连接。你必须自己做代码。

在RubyMotion的两个明显的弱点中,对我来说这是最糟糕的。 (另一个是缺乏代码完成将使可可API的写入真的很乏味。)

+0

ruby​​ mine的下一个版本IDE支持ruby运动开发和Cocoa API的自动完成。所以这可能对你有所帮助 – Rubinsh

1

卡布奇诺有同样的问题。他们开发了一个名为XcodeCapp的工具:https://github.com/cappuccino/cappuccino/tree/master/Tools/XcodeCapp

它创建“虚拟”Obj-C文件,您可以将您的插座和操作连接到IB中,在后台自动解析它们并使您能够使用IB布局您的卡布奇诺UI 。

RubyMotion应该可以采取类似的方法(如果你真的想使用IB)。

  • 约翰内斯
相关问题