2012-05-04 9 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は、loadNibNamed:owner:options:を使用してペン先をロードし、.nibファイルにあなたの.xibファイルをコンパイルするの世話をするので、あなたのUIViewController派生クラスでは:)
  3. をお楽しみいただけます。
  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-and-interface-builder / – hutch

1

しかし、あなたは本当に、あなたはまだおそらくあなたのUIをレイアウトするためにそれを使用することができ、ちょうど

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

または類似を呼び出すIBを使用したい場合。私はRubyMotionがネームマングリングをしているとは思わないので、あなたは明示的にIBを設定することであなたのルビークラスを使用することができます。

+0

RubyMotionプロジェクトで使用するためにXIBをNIBにコンパイルする方法についてもう少し言えますか?それは難しい部分のようです... –

+0

'ibtool'だけ使うことができます。 Xcodeのドラッグアンドドロップ機能を使用できないため、アウトレットとアクションを接続するのは難しい作業です。 –

+0

私は、 '--compile'と' --flatten NO'オプションを渡してみましたが、 'NSInternalInconsistencyException'を投げつけています。 'myViewController.alloc.initWithNibName(" MyViewController "、bundle:nil)をロードしていました。 ロード可能なnibファイルを取得するのに正確に' ibtool'を実行しますか? –

1

おそらくIBでインターフェイスを構築し、コマンドラインツールを呼び出してXIBをNIBにコンパイルすることができます。

しかし、IBはIBOutletトークンとIBActionトークンのRubyソースファイルを解析できないため、アウトレットに接続したりアクションを割り当てることはできません。通常、NIBローディングコードは、NIBをロードした後にそれらの接続を行います。コード内でそれを自分で行う必要があります。

RubyMotionの2つの弱点のうち、これは私にとっては最悪です。 (もう1つは、コード補完の欠如が、Cocoa APIへの書き込みを実際に面倒にすることです)。

+0

Ruby鉱山IDEの次のバージョンは、Rubyのモーション開発とCocoa APIの自動補完をサポートしています。これはあなたを助けるかもしれません – Rubinsh

1

カプチーノにも同じ問題がありました。彼らは、XcodeCappというツールを開発しました:https://github.com/cappuccino/cappuccino/tree/master/Tools/XcodeCapp

これは、あなたのアウトレットとアクションをIBに接続し、それらをバックグラウンドで自動的に解析し、IBを使用してあなたのカプチーノUIをレイアウトできるようにするObj-Cファイルを作成します。 。

RubyMotionで同様のアプローチをとることが可能です(実際にIBを使用したい場合)。

  • ヨハネス
関連する問題