web-dev-qa-db-ja.com

UIPickerViewが読み込まれた後に行を選択

UIPickerViewにテーブルのデータを読み込むiPhoneデータベースアプリがあります。選択した行を別のテーブルのデータの特定の行に設定したい。

たとえば、iPhoneユーザーの友人のX個の名前がロードされたUIPickerViewがあるとします(名前の数は可変です。1または1000で、すべてがデータベースに入力されますユーザー)。 iPhoneユーザーには、現在の親友が[〜#〜] ted [〜#〜]であるという設定があります。 UIPickerView[〜#〜] ted [〜#〜]の位置に配置する必要があります。

selectRowはどこで呼び出しますか?

viewDidAppearで試しましたが、titleForRowで呼び出されたことはありませんでした。 viewDidLoadviewWillAppearは、ピッカーへのデータソースに何があるのか​​まだわからないので、問題外です。

73
Steve Gibson

データを取得した後に呼び出します。どこにデータをロードするのかわからないので、これは機能するものの単なるモックアップです。これが意味をなさない場合は、データをどこに読み込んでいるのか教えてください。

-(void)viewDidLoad
{
    // load data from sql
    // self.someDataArray = DATAFROMSQL
    [picker reloadAllComponents];
    [picker selectRow:0 inComponent:0 animated:YES];
}
136
Jab

UIPickerViewが最初に表示されるときに(デフォルトの)UIPickerViewアイテムを選択する必要がある場合、一般的な問題があります。問題はイベントのシーケンスに関連しています。以前の投稿を読むと、[pickerView selectRow:n]は通常、View Controller ViewDidLoadイベントで呼び出されるようです。ただし、UiPickerViewデータはViewDidLoadイベントの後にのみロードされます。つまり、ViewDidLoadの選択コードは効果がありません。修正するには、ViewDidAppearに選択コードを配置します。

- (void) viewDidAppear:(BOOL)animated {
[m_pickerView selectRow:nSelectedItem inComponent:0 animated:YES]; }
43
nspire

サブビューとしてUIViewを含むUIPickerViewを初期化する場所にこれを配置します。

[myPickerView selectRow:rowWithTedsName inComponent:columnWithNames animated:NO];
7
Alex Reynolds

4.3 SDKでは、コンポーネントのロード動作がiPhoneとiPadで異なることがわかりました。 iPhoneでは、サブビュー階層に追加する前または追加した後にビューを初期化した直後にselectRow:を呼び出そうとしていました。ただし、iPadでは、selectRow呼び出しで結果が得られませんでした。 performSelector:withObject:afterDelay:呼び出しを使用して、0.1秒待機してからselectRow:inComponent:animated:を起動しました。これは、iPhoneおよびiPadで予測可能な結果を​​もたらしました。

4
Blake Watters

Swiftの場合:

self.picker?.selectRow(0, inComponent: 0, animated: true)
3
Er. Vihar

選択した行を永続的に強調表示する場合は、これを使用します

myPickerView.subviews[0].subviews[0].subviews[2].backgroundColor = myPickerView.tintColor;
0
user1760527