Utilisation d'une vue scindée sur l'iPad, j'ai le code suivant:
- (void) splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc { barButtonItem.title = @"Categories"; NSMutableArray *items = [[toolbar items] mutableCopy]; [items insertObject:barButtonItem atIndex:0]; [toolbar setItems:items animated:YES]; [items release]; self.popoverController = pc; }
7 Réponses :
Vous pouvez essayer le ci-dessous
C'est beaucoup plus facile, car la popovercontroller est une propriété. Facilite la référence.
if ([self.popoverController isPopoverVisible]) { //using the setters and getters "goes thru the proper channels" when accessing objects [self.popoverController dismissPopoverAnimated:YES]; } else { UIPopoverController *pc = [[UIPopoverController alloc] initWithContentViewController:YOUR_VIEW_CONTROLLER]; self.popoverController = pc; [pc release]; //get the button instance you set on the toolbar UIBarButtonItem *categoryButton = [[toolbar items] objectAtIndex:0]; [self.popoverController presentPopoverFromBarButtonItem:categoryButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; }
J'essaie de créer une colleure sur mon iPad pas dans une barre d'outils, puis de le rejeter à partir d'un bouton. Je viens de réaliser maintenant que le code que j'ai collé est faux.
Le code que j'ai utilisé pour afficher la Popover dans rootviewcontroller.m: ceci, je tentais de le rejeter à partir d'une autre classe: p> mon licencipopover code> fonction ressemble à: p>
HIG d'Apple dit qu'il ne devrait pas y avoir de bouton de licenciement explicite dans une popover, mais de faire ce que vous demandez, vous avez deux options.
1) Publier une nsnotification p>
ou p>
1) dans laquelle vous voyez Présentez le Popover dans, dans la méthode ViefDidLoad: p>
MyAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate]; //appDelegate instance, in this case it's the .m file for your ApplicationDelegate UISplitViewController *svc = appDelegate.splitViewController; //In this case the first view inside the appDelegate is a SplitView, svc UINavigationController *navc = [[svc viewControllers]objectAtIndex:0]; //a navigationController is at index:0 in the SplitView hierarchy. DetailView is at index:1 NSArray *vcs = [navc viewControllers]; //vcs is the array of different viewcontrollers inside the Navigation stack for nvc iPadRootViewController *rootView = [vcs objectAtIndex:0]; //declare the rootView, which is the .m file that is at index:0 of the view array UIPopoverController *pc = [rootView popoverController]; //HERE WE GO!!! popoverController is a property of iPadRootViewController's instance rootView, hereby referred to as pc. [pc dismissPopoverAnimated:YES]; //bye bye, popoverController!
Merci, j'ai déjà utilisé des notifications, et je vais certainement essayer cette méthode à nouveau cette fois.
Si vous utilisez la configuration d'UisplitViewController par défaut CODE> UISPLITVIEWCONTROLLER CODE>, le bouton de navigation créé affiche une colleure de votre Si vous voulez vous assurer Vous n'avez pas de multiples pop-ups sur une fois, vous pouvez simplement renvoyer des fenêtres contextuelles chaque fois que votre rootviewcontroller code>.
rootviewcontroller code> apparaîtra. Voici le code que j'ai utilisé pour résoudre ce problème: p>
Lorsque SPLASTVIEWCONTROLLER affiche POWPOVER, la méthode ci-dessous sera appelée. Vérifiez simplement si ce n'est pas nulle, puis le rejeter :)
- (void)splitViewController:(UISplitViewController*)svc popoverController:(UIPopoverController*)pc willPresentViewController:(UIViewController *)aViewController{ if ([pc isPopoverVisible]) { [pc dismissPopoverAnimated:YES]; } }
C'est la seule réponse ici qui résout réellement la question initiale, qui était spécifiquement à voir avec les éléments POP Overs of & Tool Créés par UisplitViewControlers. Résolu pour moi, merci.
Vous devriez utiliser la propriété Popover Ispopovervisible pour vérifier au lieu de vérifier si NIL
@OOP_MASTER Merci pour la correction, j'ai mis à jour l'échantillon en conséquence: D
Oui, vous pouvez définir le modalpresentationStyle code> comme suit: