UIPickerViewのselectRowで最終行を選択できない


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];

なんてことをやらないといけないなんて知らなかった。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です