とりあえずやったことを晒す:はじめてのiPhoneアプリ

はじめてのiPhoneアプリ
ボタンを押したら上のラベルのメッセージがかわります。

トグルスイッチも使ってみたかったので、切り替えるとこのように。

はじめてのiPhoneアプリ
ボタンタイトル(VB的にはボタンラベル)を変えたりもしております。

■test2ViewController.h

#import
#import

@interface test2ViewController : UIViewController {
IBOutlet id label;  //ラベルの内容を変更したいので、ラベルと接続
IBOutlet id mode; //現在の状態(わんこorなんこ)を記憶するために作ったけど多分いらない(変数で対応できそう)
IBOutlet id btn_On;//ボタンタイトルを変更したいので「○○する」ボタンと接続
IBOutlet id btn_Off;//ボタンタイトルを変更したいので「○○しない」ボタンと接続
}
– (IBAction)notShout:(id)sender;
– (IBAction)setShout:(id)sender;
– (IBAction)changeMode:(id)sender;
@end

■test2ViewController.m

#import “test2ViewController.h”

//modeに格納するとか、比較のために「わんこorなんこ」の状態の定数を作る
#define NANKO 0
#define WANKO 1

@implementation test2ViewController
//「○○しない」ボタンのTouchDownアクション
– (IBAction)notShout:(id)sender {
[label setText:@ “…”];
}

//「○○する」ボタンのTouchDownアクション
– (IBAction)setShout:(id)sender {
NSString *str;
if (mode==WANKO) {
str=@”わんこ!!”;
}else{
str=@”なんこ!!”;
}
//ラベル表示内容を変えるにはsetText関数で
[label setText:str];
}

//トグルスイッチのValue Changedアクション
– (IBAction)changeMode:(id)sender{
NSLog(@”イベント”);
if (mode==WANKO) {
mode=NANKO;
//コンソール画面に出力したいときに使うNSLog。
//変数等を表示したいときは、NSLog(@”%@”,変数);する。
NSLog(@”%@”,[btn_On currentTitle]);

//ボタンタイトル(表示ラベル)を変更したいときはsetTitle関数。
//「どの状態のタイトルを変更するか」を表す2つ目の引数(forState:)がないとエラーになります。
//通常は下記の通りで問題ない。押されてるときだけはforState:UIControlStateHighlighte
[btn_On setTitle:@”なんこする”
forState:UIControlStateNormal];
[btn_Off setTitle:@”なんこしない”
forState:UIControlStateNormal
];
}else{
mode=WANKO;
NSLog(@”%@”,[btn_On currentTitle]);
[btn_On setTitle:@”わんこする”
forState:UIControlStateNormal];
[btn_Off setTitle:@”わんこしない”
forState:UIControlStateNormal];
}
}
@end

UITableViewの難解さにあきれる。

いやあ、うん、むつかしいでっすね。
ビューに直接ラベルやらボタンやらおいて、動的に内容変えたりってのはそれほど苦労しなかったんで、「VBAの時の様に案外いけるかも!」と調子こいていたら、ついに壁がやってまいりました。

その名もUITableView。
連絡先や設定画面でもお馴染みのアレです。
え、その二つは見た目違うって?

実は内部的には同じものなんです‥
タイトルヘッダー行の見た目が違ってカテゴリーごとに分かれているように見えているだけなんです。

確かに画面上に描画するオブジェクトの数減らせるよね、とちょっと納得。

で。

xlbファイルを編集した後、私が参考にしているサイトではOutlet作らずにUITableViewの中身放り込んでる。

それは画面上に1つしかない時しか使えないよね?と思ってUITableViewを二個おいて同じくFiles Ownerに接続(としか表現出来ないんだけども)すると、案の定二つとも同じ内容になりました。

たぶんパーツの初期化関数を指定してオーバーライド的なことをしてるんだと思うんだけど‥

オブジェクト名じゃなくてOutlet名経由とか、直感的じゃないのが難解な原因かなあ。あと[]と。
まだソース見てもどれがOutlet名でどれが関数名なのか見極めるのに時間かかるなあ。

関数名で処理のタイミング分けたり、必ずしも.hファイルをに関数定義しないで書いてるのもあるなあ。

とりあえず基礎がためが先。

次に公式の日本語リファレンス「iPhone OS Table Viewプログラミングガイド」を熟読してみる感じで責めようと思う。

業務じゃないから速度にこだわらなくできて良いね。