11
votes

Renvoyer iPad uipopovercontroller lorsque Barbuttonitem est poussé alors qu'il est ouvert

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;
}


0 commentaires

7 Réponses :


1
votes

Vous pouvez essayer le ci-dessous xxx


0 commentaires

3
votes

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];
}


1 commentaires

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.



0
votes

Le code que j'ai utilisé pour afficher la Popover dans rootviewcontroller.m: xxx

ceci, je tentais de le rejeter à partir d'une autre classe: xxx

mon licencipopover fonction ressemble à: xxx


0 commentaires

7
votes

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>

2) explore dans la hiérarchie de votre vue jusqu'à ce que l'instance Popover h2>

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!


1 commentaires

Merci, j'ai déjà utilisé des notifications, et je vais certainement essayer cette méthode à nouveau cette fois.



0
votes

Si vous utilisez la configuration d'UisplitViewController par défaut UISPLITVIEWCONTROLLER , le bouton de navigation créé affiche une colleure de votre rootviewcontroller .

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 apparaîtra. Voici le code que j'ai utilisé pour résoudre ce problème: xxx


0 commentaires

16
votes

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];
  }
}


3 commentaires

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



0
votes

Oui, vous pouvez définir le modalpresentationStyle comme suit: xxx


0 commentaires