Accueil Médias sociaux Comment ajouter un bouton lorsque le View Controller est remplacé dans votre application iOS - dummies

Comment ajouter un bouton lorsque le View Controller est remplacé dans votre application iOS - dummies

Vidéo: Oculus Quest Basics Tutorial 2025

Vidéo: Oculus Quest Basics Tutorial 2025
Anonim

Parce que vous pouvez remplacer le contrôleur de vue de votre application iOS par un nouveau - bien que celui de la même classe de base - le nouveau contrôleur de vue a pas d'accès au bouton qu'il doit afficher ou au popover qu'il doit ignorer. Heureusement, les gens chez Apple fournissent un endroit parfait pour faire cela.

Lorsqu'un segue est déclenché - ce que vous faites lorsque vous appuyez sur une entrée de table - mais avant que le nouveau contrôleur glisse sa vue, le runtime du storyboard appelle la méthode du contrôleur de vue actuel pour transmettre des données au contrôleur de vue sur le point d'être affiché.

Cela signifie que vous pouvez transmettre les informations du bouton au nouveau contrôleur de vue avant même qu'il ne soit lancé. Ensuite, prepareForSegue: sender:, affectera le bouton à utiliser dans viewDidLoad et fermera également le contrôleur de vue.

prepareForSegue: sender: est une méthode de contrôleur de vue qui avertit un contrôleur de vue qu'un segue est sur le point d'être effectué. segue est l'objet UIStoryboadSegue, et il contient des informations sur les contrôleurs de vue impliqués dans la section.

Bien que l'implémentation par défaut de cette méthode ne fasse rien, les sous-classes UIViewController peuvent la surcharger et transmettre des données au contrôleur de vue sur le point d'être affiché. L'objet segue possède des propriétés qui pointent vers le contrôleur de vue source ainsi que vers le contrôleur de vue de destination. Le segue est le seul objet qui connaît simultanément les contrôleurs de vue source et destination.

l'expéditeur est l'objet qui a provoqué le segue, mais vous n'aurez pas besoin de l'utiliser ici.

Vous ajoutez le code à la méthode prepareForSegue: sender: pour que le composant DestinationController soit le délégué UISplitViewController et que vous affectiez les propriétés popOverButton et masterPopoverController.

Vous pourrez également ignorer le popover lorsqu'il est présent afin que l'utilisateur n'ait pas à toucher la vue pour s'en débarrasser.

Pour faire tout cela, ajoutez ce code à MasterViewController. m.

- (void) prepareForSegue: (UIStoryboardSegue *) sgue expéditeur: (id) expéditeur {if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {DetailViewController * currentDetailViewController; if ([[Self.GoldViewController.ViewControllers dernier_objet] isKindOfClass: [Classe UINavigationController]]) currentDetailViewController = (ContrôleurColorContact *) ((UINavigationController *) [self.ControlViewController.ViewControllers lastObject]). topViewController; else currentDetailViewController = [self.splitViewController. viewControllers lastObject]; if (currentDetailViewController, masterPopover Controller! = nil) [currentDetailViewController. masterPopover Controller dismissPopoverAnimated: OUI]; DetailViewController * destinationDetailViewController; if ([segue.controllerViewViewController isKindOfClass: [classe UINavigationController]]) destinationDetailViewController = (Contrôleur de détail *) ((UINavigationController *) segue.ControllerViewController). topViewController; else destinationDetailViewController = segue. destinationViewController; soi. splitViewController. délégué = destinationDetailViewCon troller; destinationDetailViewController. popOverButton = currentDetailViewController. popOverButton; destinationDetailViewController. masterPopoverController = currentDetailViewController. masterPopoverController;}}

Vous commencez par trouver le contrôleur de détail en cours car il possède les propriétés de bouton et de survol dont le nouveau contrôleur de vue a besoin.

Ce code semble plus compliqué qu'il ne l'est. Vous vérifiez d'abord si vous utilisez un iPad. Si vous l'êtes, vous obtenez le contrôleur de détail en cours en accédant à la liste des contrôleurs de vue dans le tableau viewController de splitViewController. Heureusement, la classe UIViewController a une propriété splitViewController pour vous faciliter la tâche.

Vous vérifiez ensuite si un contrôleur de navigation est dans la matrice viewControllers et, s'il y en a un, vous obtenez le topViewController du contrôleur de navigation (le contrôleur de vue actuel); sinon, vous utilisez simplement le contrôleur dans le tableau. (Vous remarquerez que beaucoup de casting se passe ici)

if ([[self.screenViewController. ViewControllers & # x2028; dernierObjet] 

isKindOfClass: [UINavigationController & # x2028; class]])

currentDetailViewController = (RTDetailViewController *)

(UINavigationController *)

[self. splitViewController. viewControllers

lastObject]). topViewController; else

currentDetailViewController = & # x2028; [soi. splitViewController. viewControllers

lastObject];

Ensuite, si vous voyez un popover, vous voulez le rejeter. Vous vérifiez pour voir si un contrôleur de popover (c'est pourquoi vous deviez rendre la propriété accessible en le déplaçant dans le fichier d'en-tête.

if (currentDetailViewController.masterPopoverController 

! = Nil)

[currentDetailViewController.maitrePopoverController > dismissPopoverAnimated: YES];

Ensuite, vous trouvez le nouveau contrôleur de destination (celui qui est transféré) en utilisant une logique similaire à la logique que vous avez utilisée pour trouver le contrôleur Detail View actuel.

if ([segue. & # x2028; isKindOfClass: [classe UINavigationController

]]) destinationDetailViewController = 

(DetailViewController *) ((UINavigationController *)

segue.ControllerController) topViewController; else

destinationDetailViewController =

destinationviewController;

Ensuite, il vous suffit de définir le délégué Split View Controller sur le nouveau contrôleur de vue, de sorte qu'il recevra le splitViewController: willHideViewController: withBarButtonItem: forPopoverController: un d splitViewController: willShowViewController: invalidatingBarButtonItem: messages.

soi-même. splitViewController. delegate = destinationDetailViewController;

Enfin, vous affectez les propriétés popOverButton et masterPopOverController dans le nouveau contrôleur de vue.

destinationDetailViewController. popOverButton =

currentDetailViewController. popOverButton;

destinationDetailViewController. masterPopoverController = 

currentDetailViewController. masterPopoverController;

Certes, cela supprime simplement le popover et assigne les propriétés, mais ne fait rien pour afficher le bouton. Cela se fait réellement dans viewDidLoad.

Vous pouvez également spécifier la taille de la fenêtre contextuelle en affectant une valeur à la propriété prefferedContentSize. Vous devez savoir que la taille réelle peut être réduite afin que le popover s'ajuste à l'écran et que le popover ne chevauche pas un clavier lorsqu'un clavier est présenté. Vous pouvez voir le code qui fait cela dans la méthode awakeFromNib de MasterViewController.

- (void) awakeFromNib {if ([[UIDevice currentDevice]

userInterfaceIdiom] == UIUserInterfaceIdiomPad)

& # x2028; {soi. clearsSelectionOnViewWillAppear = NON; 

soi-même. preferredContentSize = CGSizeMake

(320. 0, 600. 0);} [super awakeFromNib];}

Le message awakeFromNib est envoyé à un objet qui a été instancié à partir du storyboard après que tous les objets ont été chargés et initialisés. Lorsque le message est envoyé, toutes ses connexions de sortie et d'action ont été définies.

Si vous décidez d'ignorer le conseil ici et ne pas ignorer le contrôleur popover, appuyez sur à l'extérieur de la fenêtre popover pour que le popover soit rejeté. Vous pouvez toutefois autoriser l'utilisateur à interagir avec les vues spécifiées et ne pas ignorer le popover, en utilisant la propriété passthroughViews (même si vous ne le ferez pas ici). Vous devriez alors rejeter le popover vous-même.

Comment ajouter un bouton lorsque le View Controller est remplacé dans votre application iOS - dummies

Le choix des éditeurs

Comment détecter les atteintes à la sécurité sur vos fichiers journaux Web hébergés - dummies

Comment détecter les atteintes à la sécurité sur vos fichiers journaux Web hébergés - dummies

Grande question est toujours sur la sécurité. Comment pouvez-vous repérer les failles de sécurité hébergées sur le Web pour protéger votre site et garantir qu'il ne sera pas piraté? La réponse courte est la suivante: Vous ne pouvez pas. Tout est piratable avec suffisamment de temps, des cerveaux sournois et des ressources. Cependant, il y a des choses que vous pouvez faire pour vous protéger un peu. ...

Comment utiliser MySQL Workbench pour votre site Web - dummies

Comment utiliser MySQL Workbench pour votre site Web - dummies

Bien que phpMyAdmin et d'autres outils d'hébergement Web Pour gérer les bases de données, il est possible que vous ayez besoin de quelque chose de plus puissant. MySQL Workbench est une bonne source dans cette instance. MySQL Workbench est un outil de conception et d'administration de base de données gratuit créé par Oracle qui réunit deux produits: MySQL Query Browser et MySQL ...

Le choix des éditeurs

Comment mettre du texte sur un cercle dans QuarkXPress - texte fictif

Comment mettre du texte sur un cercle dans QuarkXPress - texte fictif

Sur un cercle - c'est-à-dire texte suivant l'extérieur d'un cercle ou ovale - est un élément de conception commun dans les mises en page. C'est vraiment facile à faire dans QuarkXPress, mais ce n'est pas du tout évident comment. Procédez comme suit: Obtenez l'outil Ovale de la palette Outils et dessinez ...

ÉChanges peer-to-peer par rapport aux échanges Bitcoin réguliers - mannequins

ÉChanges peer-to-peer par rapport aux échanges Bitcoin réguliers - mannequins

Deux types d'échanges de bitcoins sont utilisés : peer-to-peer et régulier. D'une part, il y a les échanges de bitcoins réguliers, qui utilisent un carnet de commandes pour faire correspondre les ordres d'achat et de vente entre les personnes. Cependant, ni l'acheteur ni le vendeur n'ont la moindre idée de l'identité de l'autre partie, ce qui permet à tous les utilisateurs ...

L'interface d'application QuarkXPress - les nuls

L'interface d'application QuarkXPress - les nuls

Les palettes visibles à gauche, à droite et en bas de QuarkXPress sont flottantes - vous pouvez les faire glisser n'importe où qui vous convient. Contrairement aux palettes, les menus de la barre de menu sont collés: vous devez toujours passer la souris à la barre de menu pour y accéder. Cependant, ...

Le choix des éditeurs

Sept erreurs d'optimisation de moteur de recherche - nuls

Sept erreurs d'optimisation de moteur de recherche - nuls

Lorsque vous essayez d'obtenir votre site Web, c'est facile de faire des erreurs d'optimisation de moteur de recherche. Voici quelques-unes des erreurs de référencement les plus courantes. Vous ne connaissez pas vos mots-clés C'est également un problème majeur: la grande majorité des sites sont créés sans que les propriétaires ou les développeurs du site ne sachent vraiment ce que sont les mots-clés ...

Soumission de pages aux moteurs de recherche pour l'optimisation - dummies

Soumission de pages aux moteurs de recherche pour l'optimisation - dummies

Vous avez probablement vu "soumission "Services annoncés pour le référencement, peut-être sous la forme de spam dans votre boîte de réception, offrant de soumettre votre site Web à des centaines de moteurs de recherche, encore et encore. Dans la plupart des cas, ces services de soumission sont une perte totale de temps et d'argent. Voici comment obtenir votre site Web dans les moteurs de recherche. You ...

Six mythes À propos de Search Engine Optimization - mannequins

Six mythes À propos de Search Engine Optimization - mannequins

Il existe une grande confusion dans le monde des moteurs de recherche. beaucoup de mythes. Voici quelques-uns des mythes communément crus qui peuvent nuire à vos positions de moteur de recherche. Tout est une question de métabalises et de soumissions. C'est le mythe le plus répandu et le plus préjudiciable de tous, tenu par de nombreux concepteurs et développeurs Web. ...