[[FrontPage]]

2010/09/18からのアクセス回数 &counter;

#contents

iPadを買ってから、これなら自分の欲しいソフトを作ってもいいなぁと感じ、iPhone/iPadのプログラム
開発の勉強をすることにしました。

** 参考書 [#t4ae32e5]
私は昔のプログラマーなので、まずは本を読んでどのように開発するかを勉強するところから
はじめます。

今回参考にしたのは、以下の2冊です。
- iPhone and iPad in Action (Manning出版)
- iPhone SDK Development (Pragmatic出版)

*** iPhone Simulatorを使って本の例題を動かしてみる [#h2b1c594]
次に私が大切にしていることは、本の例題を自分で入力して動かしてみることです。

実際に自分が使ってみることで、
- エラーの対処
- 困ったときの情報の取得方法

など、本には書いてないことが見えてきます。

** 開発環境の設定 [#w03686e9]
iPhone/iPadの開発をするには、以下のものが必要になります。

- 最新のMac OS/X (Snow Leopard)
- iPhone SDK(「Apple Developer」への登録が必要)

私が、iPhone開発に二の足を踏んでいたのもSnow Leopardにアップグレードしないと最新のiPhone SDKを
インストールできないからでした。((仕事が一段落したので、Air Book をLeopardに残し、メインをSnow Leopardにアップグレードしました。仕事でマックを使っている人は、簡単にはOSを替えられないのです!))

** 最初の一歩 [#nadb3d41]
iPhone SDKでは、主にXcodeとInterface Builder(以下IBと省略)を使ってアプリケーションを作成します。

ここでは、入力したテキストをもう一方のラベルコピーするCopyTextという例題を作成しながら、
開発手順を説明します。

*** プロジェクトの作成 [#td996dbc]
XCodeを起動し、「ファイル」→「新規プロジェクト」を選択すると、「テンプレート選択」ダイアログが表示するので、ここではiPHone OSの下のApplicationを選択し、テンプレートとしてView-based Applicationを選択し、名称をCopyTextとします。これで以下のようなプロジェクト画面が表示されます。((どのようなファイルが作成されるか分かるようにエディタ画面を小さくしてあります))

&ref(proj_panel.png);


たったこれだけで、実際の動作するアプリケーションのひな形ができあがります。
試しに、「ビルドと実行」のボタンを押してiPhone Simulatorを実行してみると、

&ref(iPhone_simulator.png);

が表示されるはずです。

*** アプリケーション起動の仕組み [#b3c290cc]
どうしてこんなに簡単にプログラムが作成され、実行するのかその仕組みをみてみましょう。

iPhoneアプリケーションの特徴は、「delegate」プロトコルとIBを使ったGUIの定義に
あります。

プロジェクト画面でMainWindow.xibをダブルクリックするとIBが起動し、MainWIndow.xib画面に
なにやら見慣れないアイコンが並んでいます。

&ref(MainWindows_XBI.png);

各アイコンに定義された情報をもとにiPhoneは画面を
作成するのですが、その過程は以下のようになっています。((iPhone SDK Development p52から引用))

+ File's OwnerのUIApplicationに定義されているdelegate(プログラムではCopyTextAppDelegate)にDidFinshLauching:メソッドを送る
+ delegateは、viewContoller(プログラムではCopy Text ViewController)のviewをwindowのサブビューとし、windowにmakeKeyAndVisibleメソッドを送ります

&ref(delegate.png);

このようにIBを使ったプログラミングでは、viewControllerが制御のメインとなります。

** Copy Textの実装 [#c21146a5]
IBの生成するXIBファイルとプログラム内のオブジェクトの橋渡しになっているが、IBOutletとIBActionです。

- IBOutletは、オブジェクトの属性がIBによって定義されることを示し
- IBActionは、IBの定義によってメソッドが呼び出されることを示します

これから、Copy Text ViewControllerを編集しながら、IBOutletとIBActionの使い方を説明します。

*** CopyTextViewController.hの変更 [#dd03354c]
CopyTextViewControllerの属性として、
- fromText : コピー元のテキストフィールド
- toLabel : コピー先のラベル
- copyButton : コピーを指示するボタン

を定義し、@properyにIBOutletキーワードを付けて定義します。

copyボタンが押されたときのアクションとして、copyを定義します。

入力時の補完について
- 自動補完 : 例えばUILabelを入力する場合、UILまでを入力すると自動補完でUILabelが表示されるので、タブを押すと確定される
&ref(AutoCompl.png);

- 候補選択 : 例えばUITextFieldを入力する場合、UITまで入力してESCを押すと選択候補リストが表示される
&ref(selectBox.png);

#pre{{
@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)が自動生成されることを示します。

*** CopyTextViewController.mの変更 [#m5b416fc]
この段階では、@property宣言した属性を@synthesizeで属性へのアクセッサが生成されます。

copyアクションはコンソールへの出力を定義します。NSLogは、Cのprintfのようなものです。

#pre{{
@implementation CopyTextViewController

@synthesize	toLabel;
@synthesize	fromText;
@synthesize	copyButton;

- (IBAction)copy {
	NSLog(@"copy method invoked");
}

}}

*** CopyTextViewController.xibの変更 [#l4e27638]
プロジェクト画面でCopyTextViewController.xibをダブルクリックするとIBが起動します。
コマンド-シフト-Lでライブラリウィンドウが表示しますので、検索フィールドにfieと入力すると
一覧からTextFieldが選択されます。このTextFieldwをライブラリからviewにドラッグしたのが
以下の図です。

&ref(IB.png);

同様に
- Label
- Button

を配置します。

次にFile's Ownerを選択し、コマンド-2でconnectionタブに切り替え、先ほど定義したIBOutletのcopyButtonとcopyボタンを線で結びます。

&ref(connection.png);

同様にRecived Actionsのcopyとボタンを結び、Touch Up Insideイベントでアクションを送るように定義します。

すべて定義したときのConnectinsは以下のようになります。

&ref(FilesOwner.png);


** コメント [#m1f474a6]
この記事は、

#vote(おもしろかった[0],そうでもない[0],わかりずらい[0])

皆様のご意見、ご希望をお待ちしております。

#comment_kcaptcha

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc