2016-06-09 12 views
0

enter image description hereenter image description here Ich fragte mich, ob es eine Möglichkeit gab, auf Einschränkungen von einer Unterklasse zuzugreifen. Ich habe eine benutzerdefinierte Ansicht. Ich bin nicht sicher, ob ich auf die Einschränkung zugreifen kann, die ich bereits in der Benutzeroberfläche eingestellt habe, also habe ich versucht, nur die Beschränkung von der Unterklasse selbst zu erstellen.Swift Constraints in Unterklasse

class PerformanceView: UIView { 
    func initialize() { 
     let heightConstraint = NSLayoutConstraint(item: self, attribute: .Height, relatedBy: .Equal, toItem: superview, attribute: .Height, multiplier: 0.47, constant: 0); 
     superview.addConstraint(heightConstraint) 
    } 
} 

Der obige Code ist nicht vollständig. Ich zeige nur, was ich versucht habe zu tun. Also zwei Fragen.

1) Kann ich über die Unterklasse auf eine Einschränkung für die Benutzerschnittstelle zugreifen? 2) Wenn nicht, wie kann ich eine Höhenbeschränkung in der Unterklasse erstellen, die die Hälfte der Superview-Höhe ist.

Und ich habe PerformanceView als die Klasse für die Ansicht, wie Sie sehen können, sagen alle Performance View auf der linken Seite. 4 von ihnen.

+0

einfach eine optional (implizit ausgepackt, wenn Sie wollen) in 'NSLayoutConstraint' Eigenschaft und haben diese' initialize' Methode es eher aktualisieren, als es sich um eine lokale Variable zu machen. Nebenbei, ich könnte einen anderen Namen für diese Methode wählen, da dies zu Verwirrung mit der 'initialize'-Klassenmethode führt, die von' NSObject' geerbt wird. – Rob

Antwort

0

sicherstellen, dass Sie Ihre eigene Klasse zu Ihrem UIView in Ihrem Storyboard

enter image description here

unter Klassentyp in Ihrer benutzerdefinierten Klasse hinzufügen - PerformanceView

erstellen die Verbindungsvariable die Einschränkung von Ihrem Storyboard zu halten

@IBOutlet weak var heightConstraint:NSLayoutConstraint? 

dann einen Rechtsklick und ziehen Sie die Verbindung

enter image description here

+0

Nach Unterklasse. Ich meinte zu einer UIView. Kein UIViewController. – KotaBear233

+0

es ist der gleiche Prozess –

+0

Bitte sehen Sie sich das Bild an, das ich hinzugefügt habe. Es wird nicht lassen Sie mich die Einschränkung der UIView – KotaBear233

1

Wenn ich Ihre Frage richtig verstehe, ist die Antwort ja, es gibt einen Weg. Sie können einfach Outlets mithilfe des Assistenten-Editors in Ihre PerformanceView ziehen.

enter image description here

Als Ergänzung - Sie können mit .Konstantes Ihre Einschränkungen im Code ändern. Das Ändern von Prioritäten wird derzeit jedoch nicht unterstützt.

Zum Ziehen von Steckdosen müssen Sie sicherstellen, dass Sie Ihre PerformanceView im Storyboard-Editor richtig identifiziert haben. Wählen Sie Ihre PerformanceView in der linken Spalte. Geben Sie dann "PerformanceView" in das markierte Feld in der rechten Spalte ein und drücken Sie die Eingabetaste. Jetzt solltest du gut gehen.

enter image description here

+0

Nach Unterklasse. Ich meinte zu einer UIView. Kein UIViewController. – KotaBear233

+0

Wie Luke sagte:] - Das funktioniert in jedem Fall. Sie haben es mit einer regelmäßigen Steckdose zu tun. – caxix

+0

Werfen Sie einen Blick auf mein Bild, das ich hinzugefügt habe. – KotaBear233

0

Wenn Sie schauen, um UIView subview @IBOutlet von IB hinzuzufügen, so scheint es, dass der Standard-Trick von Steuer von der Steuer -dragging bis auf den Quellcode in dem Hilfe-Editor doesn‘ t arbeiten.

Manchmal wird IB mit Steckdosen verwechselt, aber glücklicherweise gibt es andere Möglichkeiten, Steckdosen hinzuzufügen, und diese anderen Mechanismen scheinen gut zu funktionieren.Zum Beispiel können Sie manuell die @IBOutlet-Code in Ihre PerformanceView hinzu:

class PerformanceView: UIView { 

    @IBOutlet weak var heightConstraint: NSLayoutConstraint! 

} 

Jetzt können Sie aus dem leeren Stecker Punkt am linken Rand ziehen neben dem @IBOutlet bis zur Einschränkung:

enter image description here

Oder alternativ Steuerelement -Klicken Sie auf die PerformanceView in der Dokumentgliederung, und ziehen Sie dann von der in der Popup-Liste aufgeführten Steckdose auf die Einschränkung:

enter image description here