ホーム > 開発 > UIPickerViewのカスタム行をUITableViewCellで実装する

UIPickerViewのカスタム行をUITableViewCellで実装する

UIPickerViewに右端にアイコンの付いた行を表示したり、左端にチェックマークの付いた行を表示したい場合、1行分のUIViewを組み立てて、pickerView:viewForRow:forComponent:reusingView:から返す必要があります。
さほど面倒ではありませんが、見栄えをキチンと揃えるにはそれなりの手間がかかります。
しかし良く考えると、この要求仕様はUITableViewCellに非常に近い事が判ります。
試しに実装してみましたが、非常に良好です。

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    UITableViewCell *cell = (UITableViewCell *)view;
    if (!cell) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];
        CGSize size = [pickerView rowSizeForComponent:component];
        cell.bounds = CGRectMake(0.0, 0.0, size.width, size.height);
        cell.backgroundColor = [UIColor clearColor];
    }
    else {
        [cell prepareForReuse];
    }
    cell.imageView.image = <アイコンとか>
    cell.textLabel.text = <文字列とか>
    cell.accessoryType = <マークとか>
    return cell;
}

ポイントは、prepareForReuseの呼び出しです。
UITableViewはこれを勝手に呼び出しますが、UIPickerViewの場合は自分で呼び出さないと、セルが再利用された時に各サブビューの位置取りが狂います。
同様に、セルサイズも明示的に設定する必要があります。
また、セルの背景を透明にしないとUIPickerViewの背景の球面感に溶け込みません。

広告
カテゴリー:開発 タグ: ,
  1. tk
    2013年3月20日14:14

    こんにちは。

    ピッカーの列をタッチした時に、このUITableViewCellのcellをハイライトさせることはできるのでしょうか?

  2. 2013年3月21日00:02

    UIPickerViewには、ハイライト機能がありません。

    下記あたりを試してみては如何でしょうか?
    http://stackoverflow.com/questions/1636505/uipickerview-event-fired-when-row-is-highlighted

  3. tk
    2013年3月22日10:13

    返答ありがとうございます。
    教えていただいたサイトを参考にしてうまくいきました。

  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。