RubyMotionアプリでStoryboardを使う(ibを使う)

以前にRubyMotionでStoryboardを使う方法を調べたことがありました。

RubyMotionアプリでStoryboardを使うには

まあ使えることは使えたんですが、Storyboardとヘッダファイルの結びつけとかできなくて、あまり実用的でないなあ。。という感じでした。
最近になって、そういうモヤっとしたところを解決してくれるgemがあることをこちらで知りました。

第八回 RubyMotion で Interface Builder を使うには?

ということで、こちらで紹介されているibを使ってみました。

ibをインストール後、rake ib:project タスクを実行すると、Storyboard用のXcodeプロジェクトが作成されます。
そして rake ib:open タスクを実行すると、Xcodeが起動してStoryboardが表示されます。
このときに、ibがRubyMotionで実装したOutletやメソッドを自動でStubs.hファイルに展開してくれます。
Outletはoutletクラスメソッドで宣言的に書きます。(下記参照)
メソッドはIBActionになります。

具体的には、このように書いておいて rake ib:open を実行すると、

class NewPostViewController < UIViewController
  extend IB
  outlet :addressLabel, UILabel
  outlet :detailTextView, UITextView
  outlet :tagTextField, UITextField
  outlet :scrollView, UIScrollView
  outlet :uploadButton, UIBarButtonItem
  outlet :manholeImageView, UIImageView

  def onSingleTap
    // Do something
  end

  // snip...

end

Stubs.hにはこんな感じで展開されるわけです。

@interface NewPostViewController: UIViewController

@property IBOutlet UILabel * addressLabel;
@property IBOutlet UITextView * detailTextView;
@property IBOutlet UITextField * tagTextField;
@property IBOutlet UIScrollView * scrollView;
@property IBOutlet UIBarButtonItem * uploadButton;
@property IBOutlet UIImageView * manholeImageView;

-(IBAction) onSingleTap;

@end

あとはStoryboardからStubs.hにビーッと線を伸ばして紐付けをしてあければよいわけです。
やっぱりStoryboardを使うとビューのコードがググっと減るので便利ですね。全体構成もつかみやすくなるし。
これからはibを使っていこうと思ってます。

Comments