UIPickerViewのselectRowで最終行を選択できない
- 2013年09月16日
- iOSアプリ開発
UIPickerViewを使っていて、viewDidLoadの中で
[picker selectRow:lastRow inComponent:0 animated:NO];
のように最終行を選択させた状態を表示しようとすると、なぜか最終行の1個手前が選択された状態が表示されてしまう、という状況になりました。
環境はXcode4.6.3 で iOS6.0 iPhoneシミュレータです。
最終行以外の場合は正常に動いています。
で、調べてみたところ同じ状況に悩まされている方がいました。
ios – UIPickerView selectRow won’t select last row during initialization – Stack Overflow
この投稿のコメント欄を見ると、「コピペしてみたけど正常に動いてるよ」みたいなコメントがあるので、何か特定の状況の場合に再現するもののようです。
更にリンク先をたどって似たような状況の方の投稿を見てみると、Xcode 4.5.2でiOS6のときに再現する、なんて書かれています。
Autolayoutのバグのようだ、という情報もあります。
ios6 – UIPickerView can’t autoselect last row when compiled under Xcode 4.5.2 & iOS 6 – Stack Overflow
私はAutoLayoutをOFFにしたときの影響範囲を考えるのが面倒だったので、storyboardを使わずにコードで書いてやれっと、storyboardで貼付けていたUIPickerViewをはがして、コードで追加しました。
picker = [[UIPickerView alloc] initWithFrame:rect];
[self.view addSubview:picker];
で動かすと正常動作。解決です。
ところでUIPickerViewの選択行を明示するのに
[picker setShowsSelectionIndicator:YES];
なんてことをやらないといけないなんて知らなかった。