2016-07-05 2 views
0

Innerhalb SearchTokenViews.xib habe ich drei UIViews. Ich weiß, dass ich diese Feder wie diese zugreifen kann:Wie UIView von Nib über RestaurationIdentifier zugreifen?

let searchTokenViewsNIB = NSBundle.mainBundle().loadNibNamed("SearchTokenViews", owner: self, options: nil) 

und dann:

let firstSearchToken = searchTokenViewsNIB.first as! SearchTokenView 
let secondSearchToken = searchTokenViewsNIB[1] as! SearchTokenView 
let thirdSearchToken = searchTokenViewsNIB.last as! SearchTokenView 

Aber was bestimmt die Reihenfolge dieser drei? Wäre es nicht besser, über restorationIdentifier auf View Controller zuzugreifen?

let controller = UIStoryboard(name: "Settings", bundle: nil).instantiateViewControllerWithIdentifier("") 

Wie kann ich das gleiche mit UIView und .xib-Datei?

Antwort

1

Die einzige Lösung, die ich bisher gefunden habe, ist:

extension NSBundle { 

    func loadNibNamed(named: String, owner: AnyObject!, identifier: String) -> UIView? { 
     return loadNibNamed(named, owner: owner, options: nil).filter({ $0.restorationIdentifier == identifier }).first as? UIView 
    } 
} 
+0

Ich bin mir ziemlich sicher, dass das Laden alle und Suche der einzige Weg ist, wenn die Ansichten alle in der gleichen Nib sind. –

1

Nach der Apfelführung here:

Diese Eigenschaft zeigt an, ob Statusinformationen in der Ansicht sollen erhalten bleiben; Es wird auch verwendet, um die Ansicht während des Wiederherstellungsprozesses zu identifizieren. Der Wert dieser Eigenschaft ist standardmäßig null, , was darauf hinweist, dass der Status der Ansicht nicht gespeichert werden muss. ein String-Objekt auf die Eigenschaft zuweisen läßt die besitzende Ansicht Controller wissen, dass die Sicht relevante Statusinformationen hat

einfach Sie den Wert dieser Eigenschaft zu speichern ist nicht genug, um sicherzustellen, dass die Ansicht erhalten und restauriert wird.

Zusammenfassend ist es praktisch unmöglich, eine neue Ansicht zu "instanziieren", indem nur diese Eigenschaft verwendet wird.