78 votes

Sélectionner une ligne après le chargement de UIPickerView

J'ai un iphone de la base de données d'application qui charge un UIPickerView avec les données d'une table. Je veux mettre de la ligne sélectionnée à une ligne particulière à partir des données d'une autre table.

par exemple: disons que j'ai un UIPickerView qui est chargé avec un nombre X de noms des utilisateurs de l'iPhone amis (le nombre de noms est variable, peut être 1 ou 1000 et tous sont entrés dans la base par l'utilisateur). L'iPhone, l'utilisateur dispose d'un paramètre de préférence que leur meilleur ami TED. Je veux le UIPickerView pour être en position de TED lors de l'affichage.

Où dois-je appeler selectRow?

J'ai essayé en viewDidAppear mais il n'a jamais été appelé, dans titleForRow qui a causé toutes sortes de comportement étrange. viewDidLoad et viewWillAppear sont hors de question, parce que je ne sais pas ce qui est dans la source de données pour le sélecteur encore.

Merci à l'avance.

141voto

Jab Points 8901

Appelez-le après avoir récupéré les données. Je ne sais pas où vous chargez les données, il ne s'agit donc que d'une maquette de ce qui devrait fonctionner. Si cela n’a aucun sens, indiquez-moi où vous chargez les données afin que je puisse les rassembler dans ma tête :)

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

44voto

nspire Points 415

Il y a un problème courant lors de l'un (par défaut) UIPickerView élément doit être sélectionné lors de la UIPickerView est d'abord montré. Le problème est lié à la séquence des événements. À partir de la lecture des messages précédents, il semble que l' [pickerView selectRow:n] est normalement appelé à la vue des contrôleurs de ViewDidLoad événement. Cependant, la UiPickerView de données est chargé uniquement après le ViewDidLoad de l'événement, ce qui signifie qu'une sélection de code dans le ViewDidLoad n'aura aucun effet. Pour y remédier, placez le code de la sélection dans ViewDidAppear;

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

7voto

Alex Reynolds Points 45039

Placez-le là où vous initialisez le UIView qui contient votre UIPickerView tant que sous-vue:

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

4voto

Blake Watters Points 5330

Je viens de constater que sur le SDK 4.3, les comportements de chargement des composants sont différents entre l'iPhone et l'iPad. Sur l'iPhone, j'étais sur le point d'appeler selectRow: juste après l'initialisation de la vue avant ou après l'ajout à la hiérarchie de sous-vues. Sur iPad, l’appel selectRow n’a donné aucun résultat. Je me suis retrouvé avec un performSelector: withObject: afterDelay: appel à attendre 0,1 seconde avant de tirer selectRow: inComponent: animated :. Cela a eu des résultats prévisibles sur l'iPhone et l'iPad.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X