Objective-C 基礎編 Vol5

2010/05/11

歯医者に通い続けて半年 まだ、続きます。。。てか、調子よくない(T_T)

■InterfaceBuilderのバインディング(Outlets) InterfaceBuilder(IB)で、File's OwnerとOutletsを何気なくバインドしてたけど、 本質的にわかってなかったのでメモ。

・File's Owner → UIオブジェクト(UIView)のバインディング X-CodeがUIViewを参照するための作業 ・UIオブジェクト(UIView) → File's Ownerのバインディング UIViewのイベントをX-Codeに関連づけるための作業

File's OwnerはUIViewControllerの実態そのもの。 つまり、UIViewControllerとUIViewのバインディング(Outlet)で、 MVCモデルの「VC」にあたる作業をしてるんだな?と言う事が整理できます。

Outletsは、接続群の総称を指すんですね。 同様にRecivedActionsは、イベントアクション群を指す。 ここら辺の用語は定義だから覚えるしかないんだけど(^^;)

X-code 3.2での仕様変更

どうやら、3.2でGUIが大きく変わったらしい。 雪豹のXcode3.2でClass Actions/Outletsを見失う

そう言えば前のバージョンでは、actionの設定が違ったような気がする。 自分は3.2で本格的にやり始めたから違和感はないけど。

(1) Tools > Library パネルを開く (2) Classesに切り替え、ViewControllerを選択する

ここにOutlets、Actionsが定義されているが、場所がわかりにくすぎるw

X-codeをノンコーディングで作成する場合は、 (1) LibraryパネルでOutletやActionを定義する (2) File's Ownerを選択する (3) File > Write Class Files...で、X-CodeViewControllerのソースマージする

が、この手法だと思わぬソース書き換えのトラブルがあるので、あまりやらない方がいいかも知れない。

キーボード入力を閉じる

TextFieldにフォーカスされると自動的にキーボードが表示されるが、 キーボードの入力後(Did End on Exitイベント)やViewをタッチした時に、 キーボードを閉じるメソッドは「resignFirstResponder」を利用する。

-(IBAction)backgroundTap:(id)sender {
    [nameField resignFirstResponder];
    [numberField resignFirstResponder];
}

ただし、Viewにはタッチイベントがないため、IB上でクラスをUIView→UIControlに変更してやる。 UIControlはUIViewを継承しており、タッチイベントを持っている。 そのままと言えば、そのままだ。

てか、だんだんObjective-Cに慣れてきたような気がする(!?) ・・・が、まだ基礎本の段階で100/500ページです(-_-;)