UIPickerViewのシングルコンポーネント

2010/05/29

何か1週間が早いです。 そして、知らず知らずに年を取っていく。。。 でも勉強してきますw

今日はUIPickerViewのシングルコンポーネントについて。 まず結果から。 iPhone 2010年ドラゴンズのオーダーw

■InterfaceBuilder Xcode側で、UIPickerView用のOutletデータを定義しておく(説明は割愛)。 IBを開き、UIPickerViewをクリックしてdataSourceとdelegateをFile's Ownerにバインド。 Interface Builder 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上では、 以下のようにソースを分離してくれる。 Xcode

さて、その他の実装の方は、おまじないみたいになってるw UIPickerViewに定義してあるメソッドなんですが、

numberOfComponentsInPickerView

は、UIPickerViewのコンポーネント数(ホイールスピンの数)を返す。 うーん、プロパティで設定しないんだね・・・。

numberOfRowsInComponent

は、表示するデータ数を設定。 これも、pickerData(NSArray)をバインドしたら自動的に計算してくれればいいのに・・・。

titleForRow forComponent

は、指定したスピンのインデックスを引数に、その行のデータ(NSString)を返す。

これらを実装しておかないと、Viewがロードされた時点でRuntimeErrorになってしまう。 しかし、同じView上にUIPickerViewが2つ以上でてきたら、この処理はダメだよね。 (pickerDataを直接記述してるから) まぁ、深い事は考えず先へ進むw