iPhoneアプリ開発の虎の巻
HOME > UIPickerView

UIPickerView

UIPickerViewは特定の値の中から1つの値を選択させたい場合に使用します。

UIPickerView UIPickerView

UIPickerViewのクラス階層

NSObjectUIResponderUIView ↑ UIPickerView

生成

// 生成例
UIPickerView *piv = [[UIPickerView alloc] init];

InterfaceBuilderで生成した場合のデフォルトサイズは、320x216です。

UIPickerViewのプロパティ

【UIPickerViewの主要プロパティ】
プロパティ名/型 読専 説明
delegate
(UIPickerViewDelegate)
デリゲートを設定する
(例)自分自身をデリゲートに設定する
 piv.delegate = self;
※UIPickerViewDelegateプロトコルを実装する必要あり。
dataSource
(UIPickerViewDataSource)
データソースを設定する
(例)自分自身をデータソースに設定する
 piv.dataSource = self;
※UIPickerViewDataSourceプロトコルを実装する必要あり。
showsSelectionIndicator
BOOL
選択中の行に目印を付ける設定
 YES:目印あり
 NO:目印なし
(例)目印を付ける
 piv.showsSelectionIndicator = YES;
※一番上の画像の左側が目印なし版、右が目印あり版です。

主要なプロパティのみ掲載しています。
 上記「UIPickerViewのクラス階層」にあるクラスのプロパティも使用できます。

UIPickerViewのメソッド

【UIPickerViewの主要メソッド】
メソッド 説明
-(NSInteger)selectedRowInComponent:
(NSInteger)component
選択されている値のインデックス番号を取得する
(例)1列目の選択値のインデックスを取得する
 NSInteger val = [piv selectedRowInComponent:0];
-(void)reloadAllComponents ピッカーの表示を全て更新する
(例)全更新
 [piv reloadAllComponents];
-(void)reloadComponent:
(NSInteger)component
特定の列インデックスを指定して表示を更新する
(例)1列目を更新する
 [piv reloadComponent:0];
-(void)selectRow:(NSInteger)row
inComponent:(NSInteger)component
animated:(BOOL)animated
UIPickerViewの初期値を設定する
(例)1列目の3行目を選択された状態にする
 [piv selectRow:2 inComponent:0 animated:NO];

※インデックス番号は、列も行も0から始まります。
 例えば、1行目のインデックス番号は0、2行目のインデックス番号は1になります。

主要なメソッドのみ掲載しています。
 上記「UIPickerViewのクラス階層」にあるクラスのメソッドも使用できます。

UIPickerViewのデリゲートメソッド

【UIPickerViewDelegate】
メソッド 説明
-(NSInteger)numberOfComponentsInPickerView:
(UIPickerView*)pickerView
★必須
ピッカーに表示する列数を返すように実装する
-(NSInteger)pickerView:
(UIPickerView*)pickerView numberOfRowsInComponent:
(NSInteger)component
★必須
ピッカーに表示する行数を返すように実装する
-(NSString*)pickerView:
(UIPickerView*)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component
表示する値を返すように実装する
(rowに行番号、componentに列番号が渡されてくるので対応する値を返すように実装する)
-(CGFloat)pickerView:
(UIPickerView*)pickerView
widthForComponent:(NSInteger)component
列の幅を指定する
(componentに列インデックス番号が渡されてくるので対応する幅を返すように実装する)

主要なデリゲートメソッドのみ掲載しています。

UIPickerViewの例文

// プロトコルの実装
@interface hoge : UIViewController
    <UIPickerViewDelegate, UIPickerViewDataSource> {
...
// UIPickerViewの例文
UIPickerView *piv = [[[UIPickerView alloc] init] autorelease];
piv.center = self.view.center;  // 中央に表示
piv.delegate = self;  // デリゲートを自分自身に設定
piv.dataSource = self;  // データソースを自分自身に設定
[self.view addSubview:piv];
// デリゲートメソッドの実装
// 列数を返す例
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pickerView{
  return 2; //列数は2つ
}

// 行数を返す例
-(NSInteger)pickerView:(UIPicerView*)pickerView
        numberOfRowsInComponent:(NSInteger)component{

  if(component == 0){
    return 10;  // 1列目は10行
  }else{
    return 5;  // 2列目は5行
  }

}

// 表示する内容を返す例
-(NSString*)pickerView:(UIPickerView*)pickerView
        titleForRow:(NSInteger)row forComponent:(NSInteger)component{

  // 行インデックス番号を返す
  return [NSString stringWithFormat:@"%d", row];

}
totop