何か1週間が早いです。 そして、知らず知らずに年を取っていく。。。 でも勉強してきますw
今日はUIPickerViewのシングルコンポーネントについて。 まず結果から。 2010年ドラゴンズのオーダーw
■InterfaceBuilder Xcode側で、UIPickerView用のOutletデータを定義しておく(説明は割愛)。 IBを開き、UIPickerViewをクリックしてdataSourceとdelegateをFile's Ownerにバインド。 UIPickerViewのOutletはsinglePickerとしてバインド。
■Xcode まず、viewDidLoadにUIPickerViewに表示するデータを確保する。
- (void)viewDidLoad {
NSArray *array = [[NSArray alloc] initWithObjects:
@"荒木", @"大島", @"森野", @"ブランコ",
@"和田", @"井端", @"セサル", @"谷繁",nil];
self.pickerData = array;
[array release];
}
pickerDataは、UIPickerViewのデータを扱うためにNSArrayとして予め定義した。
NSArrayで作成して、OutletのNSArrayに格納。 initWithObjectsって覚えなきゃいけないけど、この手の設定は 「init」って打てば補完候補が出てくるから楽だよね。 てか、あとはNSArray自体のソースを見れば実装がわかるし。
#pragma mark -
#pragma mark Picker Data Source Methods
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component {
return [pickerData count];
}
#pragma mark Picker Delegate Methods
-(NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component {
return [pickerData objectAtIndex:row];
}
まず「#pragma」はIDEへの指令らしいが、イマイチぴんとこないけどXcode上では、 以下のようにソースを分離してくれる。
さて、その他の実装の方は、おまじないみたいになってるw UIPickerViewに定義してあるメソッドなんですが、
numberOfComponentsInPickerView
は、UIPickerViewのコンポーネント数(ホイールスピンの数)を返す。 うーん、プロパティで設定しないんだね・・・。
numberOfRowsInComponent
は、表示するデータ数を設定。 これも、pickerData(NSArray)をバインドしたら自動的に計算してくれればいいのに・・・。
titleForRow forComponent
は、指定したスピンのインデックスを引数に、その行のデータ(NSString)を返す。
これらを実装しておかないと、Viewがロードされた時点でRuntimeErrorになってしまう。 しかし、同じView上にUIPickerViewが2つ以上でてきたら、この処理はダメだよね。 (pickerDataを直接記述してるから) まぁ、深い事は考えず先へ進むw