2013-08-04 8 views
10

Um eine Ansicht zu initialisieren, die xib verwendet, verwende ich Funktion. Aber was ist, wenn ich die Xib mit benutzerdefinierten Parameter initialisieren muss.Initialisieren einer Ansicht mit benutzerdefiniertem initWithCoder

Ich brauche etwas wie folgt aus:

- (id)initWithCoder:(NSCoder *)aDecoder 
      andTitle:(NSString *)titleString 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     self.titleLabel = titleString; 
    } 
    return self; 
} 

Und wenn ich es nennen? Nach awakeFromNib?

Antwort

11

Sie können die initWithCoder:-Methode nicht ändern, da die Methode in einem Protokoll definiert ist, das Sie nicht steuern. Stattdessen müssen Sie entweder die Methode setTitle: aufrufen, nachdem das Objekt erstellt wurde, möglicherweise in awakeFromNib, oder vom besitzenden Controller.

+0

Sie würden das benutzerdefinierte Feld nicht in watchFromNib setzen – Chisx

+0

@ SÄN warum würden Sie den Text einer Beschriftung nicht in watchFromNib festlegen? – Wain

9

Normalerweise rufen Sie initWithCoder nicht selbst auf, so dass Sie keine benutzerdefinierten Parameter übergeben können. Diese Methode wird vom Nib-Lademechanismus aufgerufen, und Sie haben keine Kontrolle darüber.

Sie würden es sicherlich nicht von watchFromNib aufrufen - das Objekt wäre bereits an diesem Punkt initialisiert worden, so dass Sie es nicht erneut aufrufen konnten.

Die einfachste Lösung besteht darin, Ihre benutzerdefinierten Parameter als Eigenschaften verfügbar zu machen und sie nur festzulegen, nachdem Sie die Ansicht erstellt haben.

+1

Einverstanden, ich wünschte, ich könnte eine benutzerdefinierte Init-Methode erstellen, um Parameter zu übergeben, so dass alles auf einmal passiert. –

+0

Was ist mit Swift ... wenn ich meine eigenen Eigenschaften in der initwithcoder-Methode übergeben möchte, die ich als let deklarieren möchte ... wie kann ich das tun? –