2014-11-17 13 views
6

Gemäß der Dokumentation zu NSSplitViewControllers verwendet die zugehörige NSSsplitView den NSSsplitViewController als Delegat. Speziell in der Dokumentation: "Der Split-View-Controller dient als Delegat seines Split-View-Objekts (das Objekt, das die Teiler verwaltet). Wenn Sie eine Split-View-Delegate-Methode überschreiben, muss Ihr Override super aufrufen."NSSsplitViewController in OSX 10.10 mit Xcode 6

Ich habe einen NSSsplitViewController in Interface Builder implementiert und gab ihm eine Klasse. Keine der SplitView-Delegaten wird jedoch jemals aufgerufen. Außerdem, wenn ich gerade sowas spucke wie der splitView delegate [NSLog (@ "% @", self.splitView.delegate); ], das Ergebnis ist "null". Wenn jedoch zuweisen ich den Delegierten entweder in IB selbst (durch die Delegierten Auslass zum NSSplitViewController Ziehen) oder innerhalb Code ([self.splitView setDelegate: self];), erhalten I der folgende Fehler:

An uncaught exception was raised
SplitViewController's splitView is unable to use autolayout because the SplitViewController overrides an incompatible delegate method.

Ich bin völlig verwirrt.

Antwort

17

Wenn der Delegat einer geteilten Ansicht eine der folgenden Methoden implementiert, wird er nicht mit dem automatischen Layout kompatibel.

splitView:constrainMinCoordinate:ofSubviewAt: 
splitView:constrainMaxCoordinate:ofSubviewAt: 
splitView:resizeSubviewsWithOldSize: 
splitView:shouldAdjustSizeOfSubview: 

https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKitOlderNotes/#10_8AutoLayout


Und weil NSSplitViewController die Verwendung von Auto-Layout erfordert (in der Dokumentation erwähnt), diese Verfahren nicht kompatibel sind mit NSSplitViewController und sollte nicht in einer Unterklasse implementiert werden.

+2

DANKE! Ich war ursprünglich unglaublich verwirrt darüber, da ich dachte, dass die einzigen Optionen niedrig (250) und hoch (750) waren, und als ich das tat, bekam ich nicht das Verhalten, das ich erwartet hatte. Indem ich das Warteschlangenmuster von Subview 0 auf 260 änderte und das Subview-1-Warteschleifenmuster bei 250 belassen, bekam ich genau das, was ich versuchte zu tun. Sehr geschätzt! –

+0

Danke! Diese Information ist nirgendwo in der Dokumentation enthalten! – b123400