2016-07-19 12 views
0

Vergib mir meine Noob Fragen, aber ich brauche wirklich Hilfe. Ich lerne IOS Entwicklung mit swift2. Leider sind die Tutorials, denen ich gefolgt bin, nicht wirklich in fortgeschrittenen Sachen, wenn es um die Arbeit mit Views/Nib-Dateien geht.Verwendung IBOutlets/IBActions von externen geladen Nib

Wie auch immer, ich versuche, eine benutzerdefinierte Klasse zu erstellen, die meine Nib geladen werden kann, und ich kann mit den Outlets/Aktionen der neu instanziiert Klasse des Typs UIView arbeiten.

konnte ich einige Informationen finden, die mich in der Lage, habe meine Ansicht richtig zu laden und sie in meine tableHeaderView einfügen, aber ich bin ein bisschen verloren. Ich brauche ein wenig Anleitung.

ReserveHeaderCell.swift

class ReserveHeaderCell : UIView{ 


    @IBOutlet weak var ReserveHeaderImageView: UIImageView! 


    class func instanceFromNib() -> UIView { 
     return UINib(nibName: "ReserveHeaderCell", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! ReserveHeaderCell 
    } 

} 

stellte ich die Klasse in meinem XIb diese Klasse zu sein, ferner ist der Auslass in einem UIImageView Ansicht innerhalb der übergeordneten bezieht.

ReserveViewController.swift enthält:

let reserveHeaderFrame: CGRect = CGRectMake(0,0,self.view.frame.size.width, 164) 
let rhCell = ReserveHeaderCell.instanceFromNib() 
rhCell.frame = reserveHeaderFrame 
ReserveTableView.tableHeaderView = rhCell 

Und das alles funktioniert. Der Rahmen wird erstellt, das Xib wird geladen und der Ansicht hinzugefügt. Große, das Problem ist, ich habe keinen Zugriff auf meine IBOutlets, die in der ReserveHeaderCell.swift-Datei definiert werden. Außerdem weiß ich wirklich nicht, ob dies der richtige Weg ist, um das zu erreichen, was ich versuche zu tun.

Was ich versuche

- (id)initWithFrame:(CGRect)frame { 
    if (self) { 
     NSArray *nib = [[NSBundle mainBundle] 
         loadNibNamed:@"HeaderNib" 
         owner:self 
         options:nil]; 

     self = [nib objectAtIndex:0]; 
     // ACTIONS GO HERE 

    } 
    return self; 
} 

So kann ich Zugang zu einem des IBOutlets (mit OBJ-C durchgeführt) zu erreichen, die (in obj-c der H-Datei erstellt werden, aber für meinen Fall wäre es die Klasse, nicht wahr?)

die obj-c-Methode verwendet wird, kann ich einfach anrufen view.outlet = „“ und den Zugang zu ihnen bekommen.

Jede Hilfe wird geschätzt. Alle Links zu Tutorials, die helfen könnten, sind willkommen.

Vielen Dank im Voraus.

Antwort

0

können Sie diesen Code verwenden, um Ihre nib Datei

let view = (NSBundle.mainBundle().loadNibNamed("MenuHeader", owner: self, options: nil)[0] as? UIView) 
tableView.tableHeaderView = view 

Dann wird Ihr MenuHeader init wird in ihm eine normale .xib Datei mit Ihrer Zelle, nur nicht vergessen, die Einschränkungen entsprechend anzupassen auf allen Bildschirmen passen das du willst. Wenn Sie bereits eine Klasse für Ihre UIView haben, müssen Sie Ihre NIB-Datei mit dieser Klasse verbinden und dann können Sie "view.label.text" verwenden und dann Ihre Werte ändern. Denken Sie daran, einen Verweis auf diese Ansicht beizubehalten oder erstellen Sie einfach einen neuen, wenn Sie die Kopfzeileninformationen ändern müssen. Wenn Sie eine Aktion verfolgen möchten, verwenden Sie am besten eine Delegate-Methode oder das NSNotificationCenter.

+0

Ich mag es laden die benutzerdefinierte Klasse verwenden, though. Laden Sie es nicht einfach direkt in die Tabellenansicht. Die Begründung dafür ist, dass einige der Xib viel Input/Outlet haben werden. Für spezifische Nib wäre es wahrscheinlich in Ordnung, aber diese Lösung wird mir helfen, andere auf ähnliche Weise zu implementieren, die viel detailliertere Layouts/Ausgaben/Aktionen haben. – Imperialized

+0

Ich entschuldige mich, Sie waren ziemlich genau hier. Die einzige Ausnahme war, dass ich es ändern musste als! UIView zu als! MeineKundenklasse. Außerdem änderte ich es stattdessen zu UINib() Funktion. Aber das gab mir die allgemeine Richtung. Vielen Dank – Imperialized