Comment définir parentViewController dans UIViewController?
La parentViewController propriété de UIViewController est en lecture seule, mais je suis de nidification affichage personnalisé des contrôleurs et que vous souhaitez utiliser cette propriété.
Cependant, depuis qu'il est en lecture seule, et je n'ai pas trouvé d'autre moyen pour définir cette propriété, ma quesion est: comment ne - je le mettre?
Évidemment, UINavigationController pouvez définir la propriété d'une certaine manière en pushViewController, et donc peut -presentModalViewController, donc il doit être possible.
Je suis conscient que je peux juste ajouter mon propre UIViewController bien, mais je suis sûr que parentViewController est, en principe, la propriété correcte.
source d'informationauteur mrueg
Vous devez vous connecter pour publier un commentaire.
Cependant, depuis qu'il est en lecture seule, et je n'ai pas trouvé d'autre moyen pour définir cette propriété, ma quesion est: comment dois-je le mettre?
Si c'est
readonly
vous ne pouvez pas utiliser la notation point sans l'obtention d'un erreur de compilateur.Cependant, vous pourriez être en mesure d'utiliser catégories d'ajouter des
modifyParentViewController
méthode à laUIViewController
classe.Même si le propriété est en lecture seule, la variable elle-même peut-être modifiables, si elle n'est pas
@protected
. Si c'est@protected
sous-classement de la vue-contrôleur peut vous permettre la possibilité de modifier la variable.Solution est:
Il ne cause pas de problèmes avec l'éditeur de liens!
PS: N'utilisez pas "setParentViewController" comme nom de méthode, parce que cette méthode existe en privé API d'Apple et de dire:
"Le non-public de l'API qui est inclus dans votre application est setParentViewController:.
Si vous avez défini une méthode dans votre code source avec le même nom que le ci-dessus mentionné API, nous vous suggérons de modifier le nom de la méthode, de sorte qu'il n'est plus en conflit avec Apple privée de l'API pour éviter que votre demande soit marqué avec les présentations futures.
Veuillez résoudre ce problème, lors de votre prochaine mise à jour..."
Je me rends compte que cette question a été posée avant iOS 5, mais pour la référence, vous devez utiliser addChildViewController quand vous voulez nid UIViewControllers. Cela permettra également de définir automatiquement le parentViewController propriété.
Vous pouvez en lire plus à propos de "la Création de Contenu Personnalisé en Vue Contrôleurs" à Apple.
J'ai essayé d'Alex suggestion d'acheter de faire une catégorie pour UIViewController, et il a travaillé dans le simulateur, mais pas sur mon téléphone. voici la catégorie
Il compile et fonctionne très bien, mais notez le trait de soulignement membre qui est un peu rébarbative.
C'est quelles sont les causes de l'éditeur de liens d'erreur lors de la compilation à l'encontre de la 3.0.
J'ai un conteneur de vue qui a 2 sous-vues et d'un tableau est l'un d'entre eux. La table a besoin d'un parent, il peut interagir avec la barre de navigation, entre autres choses.
Je vais avec cette solution au lieu de cela:
Tous mes la vue de la table contrôleurs sont maintenant adoptedTableViewControllers. La principale raison pour laquelle ils ont besoin de parents est de sorte qu'ils peuvent pousser à la vue des contrôleurs sur la pile de navigation, de sorte que c'est géré de manière transparente par la manette de navigation de lecture.
Ce serait bien si parentViewController n'étaient pas en lecture seule, mais dans mon mêler avec _parentViewController j'ai découvert il y est plus à l'ViewController hiérarchie de juste cette propriété. Je pense qu'il pourrait y avoir beaucoup de couplage et les responsabilités dans cette relation que Apple n'a pas nettoyé assez pour les masses. Par exemple, j'ai remarqué une étrange désélection comportement lors du déplacement de la hiérarchie de navigation que je n'arrivais pas à résoudre. Peut-être UINavigation contrôleurs de refléter la classe de leur haut de contrôleur et de se comporter différemment?
En bref, c'est vraiment en lecture seule et il n'y a pas de nettoyer ou de solution simple. Vous venez de recevoir d'architecte autour de lui.
parentViewController est pour les fins de NavigationViewControllers et de présenter modal contrôleurs de vue , il n'y a aucun moyen de définir la propriété, sans les méthodes pushViewController ou presentModalViewController. Le parentViewController est une propriété en lecture seule peuvent être lus uniquement par la classe UIViewController et UINavigationController classe, les sous-classes de ces n'auront pas accès à l'ensemble de la propriété.
Il ressemble à l'appel de la setParentViewController: méthode fonctionne.
Toutefois, cela génère encore un Avertissement du compilateur. Qui, de l'OMI, les moyens de ne pas le faire (je sous-classé à la place).