2017-07-05 1 views
0

Ich habe eine UIView Unterklasse, die ich während der Laufzeit aus meinem Code instanziieren möchte, die einen benutzerdefinierten Picker präsentieren sollte, so dass seine Reichweite (min, max) von einem Server geladen wird. Ich suche nach einem netten Art und Weise eine einzige Methode aufzurufen, wird:Elegante Möglichkeit, eine UIView mit Parametern aus Xib zu erstellen

* get the view from the Xib 
* set its min, max properties so its can draw itself 

I init(withMin:Int, max:Int) Aber die Aussicht von Feder wird nicht geladen, so awakeFromNib wird schaffen können nie aufgerufen (die einige Code dort initialisieren haben)

Vielen Dank für die Helfer :)

Antwort

1

der beste Weg, dies zu tun ist, um nur ein static function innerhalb der Unterklasse erstellen

class SomeView: UIView { 
    var someInt: Int = 0 
    var someString: String = "" 

    static func instantiate(owner: AnyObject?, someInt: Int, someString: String) -> SomeView 
     // create the View 
     let newView = Bundle.main.loadNibNamed("SomeView", owner: self, options: nil)?.first as! SomeView 

     // set properties 
     newView.someString = someString 
     newView.someInt = someInt 

     return newView 
    } 

    ... 
    some other codes here 
    ... 
} 

Die Verwendung von diesem wäre so.

let someView = SomeView.instantiate(owner: self, someInt: 100, someString: "LOOL") 
self.view.addSubView(someView) 
Verwandte Themen