Personnalisé UIView avec Plume rapide sans l'aide de loadFromNib dans la vue contrôleur

J'ai toujours utilisé le loadNibNamed méthode de chargement des vues personnalisées en vue des contrôleurs, mais maintenant, je vais essayer d'éviter d'appeler cette méthode à l'extérieur de l'affichage personnalisé pour le rendre plus réutilisables, de sorte que si une autre personne utilise mon affichage personnalisé, il a seulement besoin d'instancier la vue sans loadFromNib, par exemple:

var myView: MyView = MyView()

Et l'ajout de ce point de vue à la vue du contrôleur de point de vue, assez, à la vue personnalisée charge de la plume à l'intérieur de lui-même.
Je suis en train de le faire dans Swift, en ObjC j'ai trouvé un code comme celui de cette réponse: UIView et initWithFrame et une PLUME de fichier. Comment puis-je obtenir la PLUME de chargement du fichier?
Mais dans swift je ne peux pas utiliser l'init utilisé dans la réponse:

- (id)initWithFrame:(CGRect)frame 
{
    self = [super initWithFrame:frame];
    if (self) {
        //Initialization code.
        //
        [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
        [self addSubview:self.view];
    }
    return self;
}

J'ai cette méthode et il se termine par une boucle infinie:

override init(frame: CGRect) {
    super.init(frame: frame)
    self.loadFromNibNamed("MyView")
}

J'ai aussi essayé d'ajouter un autre point de vue à l'intérieur de Mavue comme un IBOutlet comme les autres réponse dit et en utilisant toutes les inits:

@IBOutlet var view: UIView!

override init() {
    super.init()
    NSBundle.mainBundle().loadNibNamed("MediaPlayerView", owner: self, options: nil)
    self.addSubview(self.view)
}

override init(frame: CGRect) {
    super.init(frame: frame)
    NSBundle.mainBundle().loadNibNamed("MediaPlayerView", owner: self, options: nil)
    self.addSubview(self.view)
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    NSBundle.mainBundle().loadNibNamed("MediaPlayerView", owner: self, options: nil)
    self.addSubview(self.view)
}

Mais quand même eu l'erreur de la boucle infinie.

Je ne peux pas trouver une bonne solution pour cela et c'est me rend fou!! Quelqu'un peut m'aider s'il vous plaît? Merci!

  • Est-ce que votre PLUME contenir de vue de la classe MyView ou MediaPlayerView, resp.? Cela pourrait être la raison de la boucle infinie, et je suppose que init(coder:) comme la cause.
InformationsquelleAutor diegomen | 2015-01-23