Je crée un widget personnalisé que j'aimerais utiliser dans plusieurs plumes. Donc, je fais une nouvelle vue nib Screen3, ajouter des boutons, et maintenant je veux mon widget UIAwesomeSauce.Comment puis-je obtenir une vue dans Interface Builder pour charger une vue personnalisée dans une autre plume?
Si je viens d'ajouter une vue, puis de changer l'identité de la classe, elle n'obtient pas les sous-éléments de la plume UIAwesomeSauce. Même chose si je vais à la bibliothèque et passer aux classes. Il semble que seul un UIViewController a le champ pour "Load from nib", ce qui serait beau. Je sais que je peux charger la plume UIAwesomeSauce à partir du code, obtenir les objets de niveau supérieur, et le placer à la main. Mais le but de IB est de ne pas avoir à placer les choses dans le code. Mieux encore, je pourrais faire apparaître UIAwesomeSauce dans la liste des bibliothèques.
RESOLU - par Nimrod - LIRE SUR LE CODE ET EXPLICATION POUR
Quoi qu'il en soit, dood, ce qui est grand. Je peux faire mes propres classes de widget maintenant pour des trucs géniaux. Faites en sorte que FileOwner de votre interface utilisateur soit votre classe, et qu'elle ait juste un UIView normal avec toutes vos affaires. (La seule vue dans la plume du widget ne peut pas être la classe elle-même, ou vous obtenez récursif dans initWithCoder.) Ensuite, dans la plume que vous voulez utiliser, faites un UIView vanille et changez sa classe. Vous ne pourrez pas réellement voir le widget à l'intérieur de ce carré, mais traitez. Self est maintenant une vue vide, et tMyActualSelf est la vue unique dans laquelle vous avez travaillé dans l'autre nib. Yay!
- (id)initWithCoder:(NSCoder*)coder
{
if ((self = [super initWithCoder:coder]))
{
UIView *tMyActualSelf = nil;
// Initialization code
NSArray *tNibItems = [[NSBundle mainBundle] loadNibNamed:@"UIAwesomeSauce" owner:self options:nil];
for (id object in tNibItems)
{
if ([object isKindOfClass:[UIView class]])
tMyActualSelf = (UIView *)[object retain];
}
if(tMyActualSelf)
{
tMyActualSelf.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
[self addSubview:tMyActualSelf];
}
}
return self;
}
C'est tellement brillant que je veux vous faire une tarte. – CBGraham
Yay! J'ai finalement eu assez de points pour voter sur les billets, alors voilà. (Vous devriez être en mesure de voter sur des messages sur vos propres questions, tout comme vous pouvez commenter les messages sur vos propres questions.) – CBGraham
Pour quelqu'un (comme moi) qui a scanné la question et lire la réponse en détail, le demandeur a mis son "RESOLU "code comme un edit dans sa question originale. –