2014-10-13 4 views
8

Ich benutze Storyboards zum ersten Mal in iOS 8 und liebe den Live-Rendering-Aspekt der Dinge auf dem Storyboard. Ich habe jedoch einen Haken gefunden, weil meine Ansichten auf dem Storyboard richtig dargestellt wurden.Live Render IBOutlet Verbundene Subviews über IBInspectable Eigenschaften

Ich habe einen Container UIView, die eine Verbindung zu einem UILabel auf dem Storyboard enthält, ich bin versucht, die Beschriftung der Text basiert auf einem IBInspectable Attribut festlegen auf der übergeordneten Container Ansicht des Labels.

@IBDesignable class ContainerView : UIView { 
    @IBOutlet weak var : titleLabel : UILabel! 

    @IBInspectable var title : String = "" { 
     didSet { 
      titleLabel?.text = title 
     } 
    } 

    /* Init functions */ 

    prepareForInterfaceBuilder() { 
     self.titleLabel?.text = title 
    } 
} 

Wenn ich setzen Sie das Attribut im Storyboard als erwartet macht, während das Programm ausgeführt wird, aber nicht in dem Storyboard zu machen, wie ich erwarten würde. Ich habe meine Verbindungen überprüft und alles scheint korrekt angeschlossen zu sein.

Meine Frage ist: Ist es möglich, den Inhalt einer IBOutlet verbundenen Ansicht über IBInspectable Attribute zu beeinflussen und sie live auf dem Storyboard rendern zu lassen, und wenn ja, was vermisse ich oder mache ich falsch?

+0

Ich weiß, dass alle Steckdosen sind Null, wenn PrepareForInterfaceBuilder aufgerufen wird. Ich bin mir sicher, dass dies ein wichtiger Grund ist, warum das Live-Rendering nicht fortgeführt wird, aber ich bin mir nicht sicher, ob ich irgendwo anders das gewünschte Verhalten deklarieren kann, damit es im Interface Builder angezeigt wird. –

Antwort

10

Leider können Sie IBOutlet Objekte im Interface Builder für Ihre benutzerdefinierten Ansichten nicht sehen, die als IBDesignable markiert sind. Wenn Sie Ihre Steckdosen in Interface Builder sehen möchten, müssen Sie stattdessen IBOutlet normale Variablen verwenden und Sie müssen Ihre Objekte programmgesteuert erstellen.

Bitte beachten Sie auch, dass Sie, wenn Sie etwas vom Interface Builder für Ihre Objekte ändern müssen, Ihre Eigenschaften als IBInspectable definieren müssen. Derzeit sind folgende Variablen-Typen gültig für IBInspectable:

Bool, CGFloat, CGPoint, CGRect, CGSize, NSInteger, NSString, UIColor, UIImage

Ich hoffe, diese Antwort für Sie ausreichend klar.

Edit: fand ich folgende Artikel, die eine Art und Weise, wie beschreiben zu tun, was Sie brauchen:

http://justabeech.com/2014/07/27/xcode-6-live-rendering-from-nib/

2. Edit: ich den Artikel versucht, und es funktioniert. Jetzt kann ich meine Steckdosen auf Schnittstellenerzeuger sehen

+0

Ja, das ist, was ich dachte, aber ich wollte eine Bestätigung bekommen. Ich habe versucht, mein gesamtes UI-Design in den Storyboards zu behalten, aber ich denke, das ist zu diesem Zeitpunkt einfach nicht möglich. Danke für die Antwort. –

+0

Links sind keine Antworten. –

Verwandte Themen