2006年 11月 16日

InterfaceBuilder

わかってきた。すっごい便利だなぁ。

  • アウトレットって何? => インスタンス変数の変な名称
  • アクションって何? => インスタンスメソッドの変な名称

Ruby のクラスを作りたい場合を(とは限らないけど)、例えば Classes で NSObject を選んで Classes -> Subclass ... するとサブクラスができるので、それに対してアウトレット/アクションを設定する。でもって Instantiate ... するとインスタンスが出現するので、Ctrl + ドラッグで配置したコントロールとアウトレット/アクションを結びつけていく。
例えばボタンを Ctrl クリックしてそのインスタンスされたオブジェクトにドロップするとアクション一覧がでてどれに接続するか選べる。
とかいうものらしい。あとは Ruby 側でインスタンス化したりするのと一緒だけど、アプリケーションバンドル化しないとうまく実行できないのでちょっとめんどい。Makefile 書いて、make clean; make; open IIrcv.app みたいなのを毎回実行するようにしてる。

おまけ。Create Files For ... するとクラスのひな形を作ってくれていいんだけど、もちろん Objective-C。なので Ruby に変換するのを Ruby ででっちあげた。

#!/usr/bin/ruby

require 'erb'

header = ARGF.read
_, class_name, super_class = */@interface ([^¥s]+) : ([^¥s]+)/.match(header)

outlets = header.scan(/IBOutlet id (.*?);/)
actions = header.scan(/^- ¥(IBAction¥)(.*?):¥(id¥)sender;/)

ERB.new(DATA.read, $SAFE, '-').run
__END__
require 'osx/cocoa'
include OSX

class <%=class_name%> < <%=super_class%>
	<%- outlets.each do |outlet| -%>
	ib_outlets :<%=outlet%>
	<%- end %>
	<%- actions.each do |action| -%>

	def <%=action%>(sender)
	end
	<%- end %>

	def awakeFromNib
	end
end