UIView et initWithFrame et une PLUME de fichier. Comment puis-je obtenir la PLUME de chargement du fichier?
J'ai un UIView
appelé baseView
et que j'ai initWithFrame
où j'ai ajouter quelques autres points de vue et de faire quelques trucs. Le même point de vue a aussi une PLUME de fichier.
Maintenant, j'ai un UIViewController
classe nommée AppController
dans laquelle je veux ajouter la baseView
afficher à la vue de la AppController
vue, donc je le fais :
self.view = baseView;
mais le problème est que la POINTE de fichier n'est pas chargé. Comment puis-je m'assurer de la mesure trucs ET la PLUME fichier est chargé/run ?
Vous devez vous connecter pour publier un commentaire.
Vous avez plusieurs options, en fonction de la façon dont votre "baseView" la classe est destinée à être utilisée et intégrée à votre application. Il n'est pas clair à quel point vous avez l'intention d'utiliser cette classe -- comme le point de vue dans une sous-classe UIViewController, ou réutilisable, modulaire signifie d'être instancié plusieurs fois tout au long de votre application, pour une utilisation dans de nombreux point de vue différent des contrôleurs.
Si votre vue est destiné à être le seul point de vue dans une sous-classe UIViewController, puis Phonitive est correct -- le bundle avec la sous-classe UIViewController .xib fichier et utiliser la UIViewController de viewDidLoad faire initialisation.
Mais si vous voulez que votre point de Vue de la classe à un sous-composant réutilisé plusieurs fois dans différents contrôleurs de vue, intégré, soit par un code ou par l'inclusion dans un .xib fichier d'un autre contrôleur, alors vous avez besoin pour mettre en œuvre le initWithFrame: méthode init, et awakeFromNib, à manier les deux cas. Si votre intérieur d'initialisation comprend toujours certains objets .xib, puis dans votre initWithFrame vous devrez charger votre .xib manuellement afin de soutenir le "client" classes que vous voulez créer votre widget via le code. Et de même, si un .xib fichier contient votre objet, puis vous aurez besoin pour vous assurer d'appeler n'importe quel code-requis finalisation de awakeFromNib.
Voici un exemple de comment créer une sous-classe UIView composant avec la conception de l'INTERFACE utilisateur dans une plume.
Mavue.h:
Mavue.m:
Voici ce que la plume de fichier ressemble (sauf que le propriétaire du fichier doit être modifié pour Mavue classe).
assurez-vous de brancher à la fois de la vue et de magasins de marque de Propriétaire du Fichier. Ça y est! Un modèle pour la création de ré-utilisable UIView widgets.
La seule chose vraiment bien sur cette structure, c'est que vous pouvez placer des instances de votre Mavue objet dans d'autres nib fichiers, il suffit de placer une UIView à l'emplacement/la taille que vous voulez, puis changer la classe de l'identité de l'inspecteur (CMD-4) à Mavue, et boum, vous avez une instance de votre widget quelle que soit la vue que vous voulez! Tout comme UIKit objets que vous pouvez mettre en œuvre délégué protocoles de sorte que les objets à l'aide de votre widget d'être informé des événements intéressants, et peut fournir des données à afficher dans le widget pour le personnaliser.
MyView
. l'un deinitWithFrame:
l'un de Plume, celle de la Plume sont ajoutés à celui deinitWithFrame:
view
de la propriété, de sorte que le[self addSubview:self.view];
ligne ne fonctionne pas. Peut-être que c'était censé être quelque chose comme ça?NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"SubscriptionPrompt" owner:self options:nil]; [self addSubview:subviewArray[0]];
Peut-être qu'il a utilisé pour être une propriété en vue sur UIViews.[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
établit ensuite laview
de la propriété, qui est ensuite ajouté à la sous-vue. Mavue (créé avec initWithFrame) aura une sous-vue de Mavue (créé avec loadNibNamed, et de le charger dans le point de vue de la propriété).J'ai trouvé ce post après avoir eu un problème en essayant de le faire dans mon application. J'ai essayé de créer une instance de la vue à partir d'une PLUME dans la méthode ViewDidLoad, mais les contrôles sont comportés comme s'ils étaient handicapés. J'ai du mal avec cette tente de régler directement la userInteractionEnabled de la propriété et de définir par programmation de l'événement de touche du sélecteur d'un bouton dans ce point de vue. Rien n'a fonctionné. Je suis tombé sur un autre post et découvert que viewDidLoad était sans doute trop tôt pour le chargement de cette PLUME. J'ai déplacé la charge de la ViewWillAppear méthode et tout a fonctionné. Espérons que cela aide quelqu'un aux prises avec cette. La réponse principale est grande et fonctionne bien pour moi maintenant que je l'ai appelé le bon endroit.
si vous souhaitez utiliser une PLUME, c'est mieux pour votre UIView d'être en relation avec un UIViewController, dans ce cas, vous pouvez utiliser
attention de fuites de mémoire, vous devez libérer vc
Si vous avez une coutume UIView avec un fichier xib.
Ce post m'a aidé à La construction Réutilisables Vues Avec Interface Builder et Mise en page Automatique. Le truc a faire avec réglage de la IBOutlets à la FileOwner puis ajout de l'affichage du contenu à lui-même après le chargement de la plume