2010/09/18からのアクセス回数 7702
iPadを買ってから、これなら自分の欲しいソフトを作ってもいいなぁと感じ、iPhone/iPadのプログラム 開発の勉強をすることにしました。
私は昔のプログラマーなので、まずは本を読んでどのように開発するかを勉強するところから はじめます。
今回参考にしたのは、以下の2冊です。
次に私が大切にしていることは、本の例題を自分で入力して動かしてみることです。
実際に自分が使ってみることで、
など、本には書いてないことが見えてきます。
iPhone/iPadの開発をするには、以下のものが必要になります。
私が、iPhone開発に二の足を踏んでいたのもSnow Leopardにアップグレードしないと最新のiPhone SDKを インストールできないからでした。*1
iPhone SDKでは、主にXcodeとInterface Builder(以下IBと省略)を使ってアプリケーションを作成します。
ここでは、入力したテキストをもう一方のラベルコピーするCopyTextという例題を作成しながら、 開発手順を説明します。
XCodeを起動し、「ファイル」→「新規プロジェクト」を選択すると、「テンプレート選択」ダイアログが表示するので、ここではiPHone OSの下のApplicationを選択し、テンプレートとしてView-based Applicationを選択し、名称をCopyTextとします。これで以下のようなプロジェクト画面が表示されます。*2
たったこれだけで、実際の動作するアプリケーションのひな形ができあがります。 試しに、「ビルドと実行」のボタンを押してiPhone Simulatorを実行してみると、
が表示されるはずです。
どうしてこんなに簡単にプログラムが作成され、実行するのかその仕組みをみてみましょう。
iPhoneアプリケーションの特徴は、「delegate」プロトコルとIBを使ったGUIの定義に あります。
プロジェクト画面でMainWindow.xibをダブルクリックするとIBが起動し、MainWIndow.xib画面に なにやら見慣れないアイコンが並んでいます。
各アイコンに定義された情報をもとにiPhoneは画面を 作成するのですが、その過程は以下のようになっています。*3
このようにIBを使ったプログラミングでは、viewControllerが制御のメインとなります。
IBの生成するXIBファイルとプログラム内のオブジェクトの橋渡しになっているが、IBOutletとIBActionです。
これから、Copy Text ViewControllerを編集しながら、IBOutletとIBActionの使い方を説明します。
CopyTextViewControllerの属性として、
を定義し、@properyにIBOutletキーワードを付けて定義します。
copyボタンが押されたときのアクションとして、copyを定義します。
入力時の補完について
@interface CopyTextViewController : UIViewController { UILabel *toLabel; UITextField *fromText; UIButton *copyButton; } @property(nonatomic, retain) IBOutlet UILabel *toLabel; @property(nonatomic, retain) IBOutlet UITextField *fromText; @property(nonatomic, retain) IBOutlet UIButton *copyButton; - (IBAction)copy; @end
@propertyで、属性へのアクセッサ(getter/setter)が自動生成されることを示します。
この段階では、@property宣言した属性を@synthesizeで属性へのアクセッサが生成されます。
copyアクションはコンソールへの出力を定義します。NSLogは、Cのprintfのようなものです。
@implementation CopyTextViewController @synthesize toLabel; @synthesize fromText; @synthesize copyButton; - (IBAction)copy { NSLog(@"copy method invoked"); }
プロジェクト画面でCopyTextViewController.xibをダブルクリックするとIBが起動します。 コマンド-シフト-Lでライブラリウィンドウが表示しますので、検索フィールドにfieと入力すると 一覧からTextFieldが選択されます。このTextFieldwをライブラリからviewにドラッグしたのが 以下の図です。
同様に
を配置します。
次にFile's Ownerを選択し、コマンド-2でconnectionタブに切り替え、先ほど定義したIBOutletのcopyButtonとcopyボタンを線で結びます。
同様にRecived Actionsのcopyとボタンを結び、Touch Up Insideイベントでアクションを送るように定義します。
すべて定義したときのConnectinsは以下のようになります。
この記事は、
皆様のご意見、ご希望をお待ちしております。