InterfaceBuilderでオブジェクトの配置と連携(IBOutlet, IBAction)

オブジェクトをドラッグアンドドロップで配置

まず左のファイルリスト(Navigator → Command+1で表示、Command+2で消えるやつです)からstoryboardを選択します。すると真ん中にiphoneの画面野用なものが表示されると思います。ここにobjectを配置していくことになります。

右下にオブジェクトリストが表示されていると思います。表示されていない場合は、左の画像の丸で囲った部分をクリックすると表示されます。
この中からオブジェクトをドラッグして画面内にドロップします。






オブジェクトとプログラムの接続

IBOutletの使い方

オブジェクトをプログラムから操作するためにはオブジェクト名やオブジェクトの動作に対応するメソッド名を作る必要があります。IBOutletやIBActionを使うことによって画面にドロップしたオブジェクトの名前やメソッド名を決め、プログラムで制御することができるようになります。

storyboardを選択して画面が表示された状態にして、下の画像の上の方の丸を選択してAssistanteditorを表示させます。その後、オブジェクトControlを押しながらドラッグしてAssistant editorの@interfaceの下にドロップすると下画像のようなダイアログが表示されます。ConnectionをOutletにして、Nameにオブジェクト名を、Typeにオブジェクトの型を入力し、Storageを選択しましょう。
Storageはweakとstrongとあるのですが、これは弱参照か強参照を意味し、weakにすると参照元のオブジェクトがなくなったとき、自動的に破棄されます。親のビューが消えたときに消したい場合はweakを、勝手に消えてほしくないときはstrongとするのがいいらしいです。詳しくは下のサイトを参照してください。
http://ameblo.jp/iichin0708/entry-11394651725.html
http://ebisu.surbiton.jp/sysblog/2011/06/objc-memory.html

これでIBOutletによる接続が完了したので、プログラムから操作できるようになります。ViewController.mのViewDidLoadメソッドにオブジェクトlabel1のテキストを設定する下のメソッドを入力してRunでシュミレーションするとテキストがかわっているのがわかると思います。

(void)viewDidLoad
{
[super viewDidLoad];
 label1.text = @"Hello"; //ここを入力
}

IBActionの使い方

オブジェクトに対してクリックイベントなどを発生させたい場合は、それに対応するメソッドを生成する必要があります。IBOutletと同様にドラッグアンドドロップを行うとダイアログが表示されるので、ConnectionをActionにします。ラベルのようにActionが選択できないオブジェクトもありますので注意してください。Nameにメソッド名を、Eventにメソッドが実行されるイベントを入力してください。Typeには引数の型(?)を、Argumentsに引数を選択するようなのですが、基本的にはデフォルトのidとsenderで大丈夫だと思います。

まとめ

これでオブジェクトとプログラムの連携は可能になりました。IBOutletを使うことでオブジェクト名を決定し、オブジェクトをプログラム内で操作することができ、IBActionで自動生成されたメソッドにプログラムを書くことでオブジェクトのイベントに対する動作を決定することができます。