objective c - how - Seleccionar fila después de cargar UIPickerView
uitextfield picker (6)
Acabo de descubrir que en los SDK 4.3 los comportamientos de carga de los componentes son diferentes entre el iPhone y el iPad. En el iPhone, estaba a punto de invocar selectRow: justo después de inicializar la vista antes o después de agregarla a la jerarquía de la subvista. Sin embargo, en iPad, la llamada a selectRow no arrojó ningún resultado. Terminé usando un performSelector: withObject: afterDelay: call para esperar 0.1 segundos antes de disparar selectRow: inComponent: animado :. Esto tuvo resultados predecibles en el iPhone y el iPad.
Tengo una aplicación de base de datos de iPhone que carga un UIPickerView
con datos de una tabla. Quiero establecer la fila seleccionada a una fila particular de los datos en otra tabla.
Por ejemplo: Digamos que tengo un UIPickerView
que está cargado con X número de nombres de los amigos de los usuarios de iPhone (el número de nombres es variable, podría ser 1 o 1000 y el usuario ingresará todos en la base de datos). El usuario de iPhone tiene una preferencia establecida de que su mejor amigo actual es TED . Quiero que el UIPickerView
esté en posición para TED cuando se muestre.
¿A dónde llamo selectRow
?
Intenté en viewDidAppear
, pero nunca fue llamado, en titleForRow
que causó todo tipo de comportamiento extraño. viewDidLoad
y viewWillAppear
están descartados, porque todavía no sé qué hay en el origen de datos para el selector.
Coloque esto dondequiera que inicialice la UIView
que contiene su UIPickerView
como una subvista:
[myPickerView selectRow:rowWithTedsName inComponent:columnWithNames animated:NO];
Hay un problema común cuando se debe seleccionar un elemento UIPickerView (predeterminado) cuando se muestra inicialmente UIPickerView. El problema está relacionado con la secuencia de eventos. Al leer las publicaciones anteriores, parece que [pickerView selectRow: n] normalmente se llama en el evento viewDidLoad de los controladores de vista. Sin embargo, los datos de UiPickerView solo se cargan después del evento ViewDidLoad, lo que significa que cualquier código de selección en ViewDidLoad no tendrá ningún efecto. Para remediarlo, coloque el código de selección en ViewDidAppear;
- (void) viewDidAppear:(BOOL)animated {
[m_pickerView selectRow:nSelectedItem inComponent:0 animated:YES]; }
Llámalo luego de recuperar los datos. No sé dónde cargan los datos, así que esto es solo una maqueta de lo que debería funcionar. Si esto no tiene sentido, avíseme dónde está cargando los datos para poder armarlos en mi cabeza :)
-(void)viewDidLoad
{
// load data from sql
// self.someDataArray = DATAFROMSQL
[picker reloadAllComponents];
[picker selectRow:0 inComponent:0 animated:YES];
}
Para Swift es simplemente:
self.picker?.selectRow(0, inComponent: 0, animated: true)
Si desea que la fila seleccionada permanentemente resaltada, use esto
myPickerView.subviews[0].subviews[0].subviews[2].backgroundColor = myPickerView.tintColor;