6
votes

IOS: Identifiez de manière unique la vue Concontrôleurs de Storyboard

J'ai un ViewController destiné à être réutilisable et un nombre arbitraire d'instances sera enchaîné dans un NavigationController dans Storyboard, tous partageant le même modèle en tant que délégué.

Le ViewController doit indiquer le modèle dans lequel ils sont. Actuellement, ils ont une propriété d'intensité de la SEGUE, mais elle ne semble pas très idiomatique et ne se prête pas à avoir plusieurs instances à l'écran (pour iPad). Je pense qu'il doit être un moyen plus propre de le faire, alors quelqu'un sache-t-il ce qu'il est? Merci.

résultat: self.view.tag


0 commentaires

4 Réponses :


9
votes

Un UIVIEWCONTROLLER'S UIView a une propriété Tag que vous pouvez définir depuis n'importe où que vous souhaitiez. Vous pouvez également identifier simplement le type du contrôleur en utilisant [auto classe] . Ou utilisez simplement l'emplacement de la mémoire en référençant directement le contrôleur.

Mise à jour Vous pouvez simplement implémenter un identifiant unique pour un UIViewController à l'aide d'une catégorie.


8 commentaires

L'identifiant avait l'air prometteur, mais il ne semble pas en fait une propriété d'UIViewController. Ce sont des instances de la même classe, donc [auto-classe] ne fonctionnera pas et que l'emplacement de la mémoire change si le contrôleur est défini et réaffecté.


@mgold Oh, s'avère qu'il n'y a aucun identifiant dans le contrôleur. Étrange, car Xcode l'a montré dans l'IB. Je vous recommanderais de la mettre en œuvre vous-même, en utilisant un protocole que tous les contrôleurs mettent en œuvre. Aussi: Identifiant est également parti une fois que vous avez déroulé, et je suis sûr que les adresses de mémoire ne se décalent jamais pendant les opérations normales.


C'est fondamentalement ce que je fais, mais je ne trouve pas un bon moyen de définir l'identifiant. L'utilisation d'un champ dans Storyboard / IB serait idéal puisque les instances sont déjà aménagées.


Le uiview ( [Vue du contrôleur] ) a une propriété étiquette que vous pouvez utiliser (et probablement définie dans l'IB). Ceci est un nsinteger


@Till il ne semble pas avoir une propriété . La chose la plus proche est titre , mais je recherche un équivalent lisible par machine (idéalement et INT qui peut être utilisé pour indexer et nsarray ). EDIT: Oh, la vue elle-même. Va regarder dans. Documentation UIViewController


@mgold mon mauvais, je n'ai pas correctement modifié la publication - veuillez recharger et voir si cela a plus de sens maintenant.


@Tomvanderwoerdt Oui, j'aurais dû faire ça en premier lieu. Veuillez accepter mes excuses. Gee, vous savez, je sentais que vous étiez si étroit avec votre réponse que la corrigeant cela le ferait parfaitement.


@Till on dirait que cela fonctionnera, mais j'aurai besoin de quelques minutes pour la coder et s'assurer. Une autre raison d'ajouter votre propre réponse est que je peux l'accepter et vous donner crédit.



1
votes

Je suppose que la manière "la plus propre" en termes d'architecture de conception serait peut-être une gamme de fichiers de vue. (Cela pourrait être géré dans le délégué de l'application.) Cependant, il existe des considérations de mémoire - sur l'iphone, vous voudrez probablement créer et détruire les contrôleurs d'affichage au besoin. Le tableau pourrait contenir le identifiant et peut-être d'autres informations relatives à un modèle afin de recréer les contrôleurs selon les besoins.


0 commentaires

0
votes

Dommage, il n'y a pas de propriété storyboardIdentifier de UIViewController. Ils peuvent être instanciés avec cet identifiant, mais il serait utile que la mentalité de vue puisse interroger son identifiant.


0 commentaires

0
votes

J'ai récemment couru dans cela. Je pensais que vous pouvez ajouter un "ID de restauration" dans le storyboard. Ensuite, vous pouvez y accéder peut-être comme ceci (selon votre cas d'utilisation) xxx


0 commentaires