Выбор строки После загрузки UIPickerView

У меня есть приложение базы данных iphone, которое загружает UIPickerView с данными из таблицы. Я хочу установить выбранную строку в определенную строку из данных в другой таблице.

например: Допустим, у меня есть UIPickerView, который загружается с X числом имен друзей пользователей iPhone (количество имен является переменной, может быть 1 или 1000, и все они вводятся в БД пользователем). У пользователя iPhone есть предпочтение, что их текущий лучший друг - TED. Я хочу, чтобы UIPickerView располагался в TED при отображении.

Где я могу позвонить selectRow?

Я пробовал в viewDidAppear, но он никогда не вызывался, в titleForRow, который вызывал все виды странного поведения. viewDidLoad и viewWillAppear не могут быть и речи, потому что я еще не знаю, что в источнике данных для сборщика.

Спасибо заранее.

Ответ 1

Вызовите его после извлечения данных. Я не знаю, где вы загружаете данные, поэтому это всего лишь макет того, что должно работать. Если это не имеет смысла, сообщите мне, где вы загружаете данные, чтобы я мог собрать их вместе в моей голове:)

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

Ответ 2

Существует обычная проблема, когда элемент UIPickerView (по умолчанию) должен быть выбран, когда сначала отображается UIPickerView. Проблема связана с последовательностью событий. Из чтения предыдущих сообщений кажется, что [pickerView selectRow: n] обычно вызывается в событии ViewDidLoad диспетчера представлений. Однако данные UiPickerView загружаются только после события ViewDidLoad, что означает, что любой код выбора в ViewDidLoad не будет иметь никакого эффекта. Чтобы исправить это, поместите код выбора в ViewDidAppear;

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

Ответ 3

Поместите это везде, где вы инициализируете UIView, который содержит ваш UIPickerView, как подвью:

[myPickerView selectRow:rowWithTedsName inComponent:columnWithNames animated:NO];

Ответ 4

Я только что нашел, что на 4.3 SDK поведение загрузки компонентов различно между iPhone и iPad. На iPhone я собирался вызывать selectRow: сразу после инициализации представления до или после добавления в иерархию subview. Однако на iPad вызов selectRow не дал никаких результатов. Я заработал с помощью функции performSelector: withObject: afterDelay: вызов дождаться 0,1 секунды до запуска selectRow: inComponent: animated:. Это имело предсказуемые результаты на iPhone и iPad.

Ответ 5

Для быстрого это просто

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

Ответ 6

Если вы хотите, чтобы выбранная строка была постоянно выделена, используйте этот

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