UIPickerView
にテーブルのデータを読み込むiPhoneデータベースアプリがあります。選択した行を別のテーブルのデータの特定の行に設定したい。
たとえば、iPhoneユーザーの友人のX個の名前がロードされたUIPickerView
があるとします(名前の数は可変です。1または1000で、すべてがデータベースに入力されますユーザー)。 iPhoneユーザーには、現在の親友が[〜#〜] ted [〜#〜]であるという設定があります。 UIPickerView
を[〜#〜] ted [〜#〜]の位置に配置する必要があります。
selectRow
はどこで呼び出しますか?
viewDidAppear
で試しましたが、titleForRow
で呼び出されたことはありませんでした。 viewDidLoad
とviewWillAppear
は、ピッカーへのデータソースに何があるのかまだわからないので、問題外です。
データを取得した後に呼び出します。どこにデータをロードするのかわからないので、これは機能するものの単なるモックアップです。これが意味をなさない場合は、データをどこに読み込んでいるのか教えてください。
-(void)viewDidLoad
{
// load data from sql
// self.someDataArray = DATAFROMSQL
[picker reloadAllComponents];
[picker selectRow:0 inComponent:0 animated:YES];
}
UIPickerViewが最初に表示されるときに(デフォルトの)UIPickerViewアイテムを選択する必要がある場合、一般的な問題があります。問題はイベントのシーケンスに関連しています。以前の投稿を読むと、[pickerView selectRow:n]は通常、View Controller ViewDidLoadイベントで呼び出されるようです。ただし、UiPickerViewデータはViewDidLoadイベントの後にのみロードされます。つまり、ViewDidLoadの選択コードは効果がありません。修正するには、ViewDidAppearに選択コードを配置します。
- (void) viewDidAppear:(BOOL)animated {
[m_pickerView selectRow:nSelectedItem inComponent:0 animated:YES]; }
サブビューとしてUIView
を含むUIPickerView
を初期化する場所にこれを配置します。
[myPickerView selectRow:rowWithTedsName inComponent:columnWithNames animated:NO];
4.3 SDKでは、コンポーネントのロード動作がiPhoneとiPadで異なることがわかりました。 iPhoneでは、サブビュー階層に追加する前または追加した後にビューを初期化した直後にselectRow:を呼び出そうとしていました。ただし、iPadでは、selectRow呼び出しで結果が得られませんでした。 performSelector:withObject:afterDelay:呼び出しを使用して、0.1秒待機してからselectRow:inComponent:animated:を起動しました。これは、iPhoneおよびiPadで予測可能な結果をもたらしました。
Swiftの場合:
self.picker?.selectRow(0, inComponent: 0, animated: true)
選択した行を永続的に強調表示する場合は、これを使用します
myPickerView.subviews[0].subviews[0].subviews[2].backgroundColor = myPickerView.tintColor;