2012-05-04 113 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)。

  • 約翰內斯
相關問題