Question

Supposons que j'ai une scénario contenant une vue contenant un bouton.Lorsque l'utilisateur appuie sur ce bouton, une colleure apparaît.

Ainsi, j'ai besoin de définir une ancre en faisant glisser la SEGUE sur le bouton à l'aide de Xcode (puis faites SacsSeDidentifier: ).

Alors, ma question est la suivante: y a-t-il un moyen de définir cette "ancre" de manière programmatique?

merci.

Était-ce utile?

La solution

Dans mon cas, j'ai ajouté programmatiquement plusieurs uibarbuttonitem. Le problème de l'utilisation d'une vue invisible comme une archi est que, si comme dans mon cas, la taille de l'Uibarbuttonitem change sa taille, la flèche de la popover n'apparaît pas centrée et qu'elle fonctionne, a l'air un peu étrange.

Comment le résoudre.

Créer une petite vue sur Storyboard (la taille n'a pas d'importance), faites-la invisible et de le lier. Dans mon cas, cela s'appelle InvisibleViewasarchor

Connectez l'élément UIBARBUTTON avec l'action suivante.

-(IBAction) showMyPopover:(id)sender {
    if([self.popoverController isPopoverVisible])
    {       
        [self.popoverController dismissPopoverAnimated:YES];
    }else{
        self.invisibleViewAsArchor.frame = CGRectMake([sender view].frame.origin.x,
                                                          [sender view].frame.origin.y-50,
                                                          [sender view].frame.size.width,
                                                          [sender view].frame.size.height);

        [self performSegueWithIdentifier:@"segue_to_something" sender:self];
    }
}

Comme vous pouvez le constater avant qu'il ne montre la popover (avec la performanceDidentifier), je change du cadre de l'archi avec les valeurs du bouton qui a tiré l'événement.

espère que cela aide.

Autres conseils

Dans le storyboard ancrez le Popover à un bouton arbitraire.Ne vous inquiétez pas trop sur lequel comme il sera remplacé dans le code.

Dans la méthode View Controller PrepreporSegue, ajoutez le code:

let dest = segue.destinationViewController
dest.popoverPresentationController?.barButtonItem = <your bar button here>

ou si vous voulez ancrer à une vue à la place

dest.popoverPresentationController?.barButtonItem = nil
dest.popoverPresentationController?.sourceView = <your view here>

Vous ne pouvez pas créer de manière programmatique de Segry comme expliqué ici: créer une SEGUE par programme , cependantVous pouvez configurer quel contrôleur de destination que vous souhaitez afficher au moment de l'exécution.Ceci est expliqué dans la documentation Apple ici: Configuration du contrôleur de destination lorsqu'une Segue est déclenchée .

Espérons que cela aide!

J'ai eu le même problème où je crée un barbouttonitem programmatiquement.Vous pouvez également être capable de le contourner en créant un bouton invisible et désactivé que vous pouvez définir comme ancre dans IB.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top