2017-08-11 6 views
0

Ich versuche, Koloda Karte swiping Stil zu implementieren. Ich habe eine .xib-Datei mit der Struktur Bild 1 & 2. xib file structureVerbindung von IBOutlet zu XIB Datei nicht möglich

erstellt. Wie Sie in Bild 1 sehen können, habe ich den Besitzer der Datei als benutzerdefinierte Klasse XIB-Dateien festgelegt.

In Bild 2, ich habe die Klasse leer gelassen (nicht sicher, ob dies richtig ist)

Meine NIB-Klasse nach dem unten angegebenen Code.

import UIKit 
import Koloda 

class CardView: KolodaView { 

var view: UIView! 
var nibName: String = "CardView" 
var uid: String! 

@IBOutlet weak var profileImage: UIImageView! 
@IBOutlet weak var nameLabel: UILabel! 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    setUp() 
} 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    setUp() 
} 

func setUp() { 

    view = loadViewFromNib() 

    view.frame = bounds 
    view.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
    view.isUserInteractionEnabled = true 
    addSubview(view) 

} 

func loadViewFromNib() -> UIView { 
    let bundle = Bundle(for: CardView.self) 
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle) 
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView 

    return view 
} 
} 

In meinem Controller habe ich die Ansicht für Index wie folgt;

func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView { 

    _ = userResults[Int(index)] 

    let bundle = Bundle(for: CardView.self) 
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle) 
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView 

    return view 
} 

Ich kann meine IBOutlets nicht einfügen und sie in meinem UIViewController verweisen. Wie werde ich bekommen GeoFire & FirDatabase Info und bevölkern die Ansichten. Ich verstehe, dass dies etwas mit dem Besitzer der Datei zu tun hat. Ich bin mir nur nicht sicher, wie ich die IBOutlets für die Unteransicht anstelle der benutzerdefinierten Klasse festlegen soll.

Jede Hilfe wird geschätzt.

+0

Warum würden Sie 'koloda' Methode liefert einen' UIView' lassen, da Sie streben zu einen 'CardView' bekommen? –

+0

Das erste, was ich vermute, dass CardView XIB Ansicht ist. Und setUp() darf nicht explizit aufgerufen werden, da neues CardView für sich selbst hinzugefügt wird (Rekursion bei der Initialisierung der Ansicht). Und wenn Sie raten, dass Sie die Label-Ausgänge von xib zum View-Controller selbst haben wollen, müssen Sie den Dateibesitzer in den View-Controller ändern, an den Sie die Steckdose anschließen möchten. – snjmhj

+0

@snjmhj Das ist richtig. Ich glaube, die Steckdosen müssen der CardView-Klasse und nicht dem ViewController hinzugefügt werden. –

Antwort

0

schließlich nach Stunden um Bastelei.

  1. Klasse ist jetzt;

    import UIKit 
    
    class CardView: UIView { 
    
    var uid: String! 
    
    @IBOutlet weak var profileImage: UIImageView! 
    @IBOutlet weak var nameLabel: UILabel! 
    
    } 
    
  2. entfernt Datei Besitzer

  3. CardView in xib jetzt CardView gesetzt
  4. viewForCardAt ist jetzt;

    func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView { 
    
    let bundle = Bundle(for: CardView.self) 
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle) 
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! CardView 
    
    let users = userResults[Int(index)] 
    
    view.profileImage.sd_setImage(with: URL(string: users.userProfileURL)) 
    view.nameLabel.text = users.userName 
    view.uid = users.uid 
    
    return view 
    

    }

ich jetzt habe arbeiten "Zunder Karte mit Geolokalisierungsdienste" :)

0

Versuchen Sie, die CardView Klasse benutzerdefinierte Klasse CardView Einstellung statt UIView

+0

Wenn ich loadViewFromNib ändere - lassen Sie view = nib.instantiate (withOwner: self, Optionen: nil) [0] as! UIView, um view = nib.instantiate (withOwner: self, Optionen: nil) [0] as! CardView und derselbe in - viewForCardAtIndex Ich erhalte einen Fehler (Konnte keinen Wert des Typs 'UIView' erzeugen) –

Verwandte Themen