2010-09-15 2 views
2

Dans mon application iPad, je sauve l'état (visible/non visible) d'un popover. Ainsi, lors du lancement de l'application que j'Initialisez le UIPopoverController et lui dire de se montrer à l'aide presentPopoverFromBarButtonItem: permittedArrowDirections: animation :. Pour le premier argument (UIBarButtonItem), j'utilise self.navigationItem.rightBarButtonItem. Cependant, le popover continue d'apparaître sur le côté gauche de l'écran (et non sous le bouton ciblé).comportement étrange lors de l'affichage UIPopoverController

Après l'application est lancée, le comportement est comme prévu. Des suggestions pour résoudre ce problème? Pour votre information, j'initialise rightBarButtonItem et l'assigne à l'élément navigationItem dans la méthode viewDidLoad et avant de demander au survol de se présenter. J'ai essayé d'appeler le popover dans viewWillAppear et viewDidLoad, mais l'effet est le même.

Ma meilleure alternative est d'utiliser presentPopoverFromRect: inView: allowedArrowDirections: animé: à la place et "devinez" la position en fonction de l'orientation de l'appareil.

Mise à jour: quand je tourne l'iPad, l'popover ne saute à la position correcte. Il semble que la position de barButtonItem ne soit déterminée qu'à la dernière minute et après que je demande à mon popover de se présenter.

+0

Que diriez-vous de dans viewDidAppear :? Je m'attends à ce que le premier affichage de viewWillAppear: call se produise, les vues n'ont pas encore été définies. – imaginaryboy

+0

Non, pas de chance avec l'une des méthodes viewWillAppear ou viewDidAppear. C'est ce qui est si étrange à ce sujet. Après que la vue s'affiche et que j'appuie sur le rightBarButtonItem, tout va bien. –

+0

même problème ... des résultats? – rjobidon

Répondre

1

Dans des situations comme celles-ci, où le calendrier semble important que je trouve que l'affaire de remettre à plus tard une action jusqu'à la prochaine itération de la boucle d'exécution aide. Si le développement pour iOS 4.0+, cela peut être facilement réalisé avec GDC:

// call from viewDidAppear: 
dispatch_async(dispatch_get_main_queue(), ^{ 
    // call presentPopoverFromBarButtonItem:permittedArrowDirections:animated: here 
});