Ich versuche, eine Schaltfläche am unteren Rand meiner NSOutlineView-basierten Quellenliste hinzuzufügen, wie sie in vielen Mac-Anwendungen (sowohl von Apple als auch von Drittanbietern) zu sehen ist, wie in diesen Screenshots zu sehen ist:
Um es textuell zu beschreiben, teilt die Steuerleiste den speziell gestalteten Hintergrund der Quellenliste (oder unter Yosemite, "vibrancy"), ohne den Inhalt der Quellliste zu überlappen. Um diesen Effekt zu reproduzieren, habe ich bisher folgende Methoden ausprobiert:
NSBox
es mit ihren Hintergründen, die auf die NSColor
festgelegt sind, die von der backgroundColor-Eigenschaft der Quellenliste bereitgestellt wird. Dies erfordert eine Menge von erzwungenen Neuzeichnungen, um korrekt zu zeichnen (insbesondere bei aktiven / inaktiven Zuständen des Fensters), sieht aber ansonsten perfekt aus. Ein ähnliches Verhalten wird mit einer benutzerdefinierten NSView
Einstellung zum Zeichnen des Hintergrunds mit Farbverlauf angezeigt. Gibt es eine andere Methode, um dies zu erreichen? # 2 ist das, dem ich am nächsten gekommen bin, aber angesichts der damit verbundenen Probleme ist es offensichtlich nicht dazu gedacht, von Entwicklern von Drittanbietern genutzt zu werden.
Dies mit Vibrancy in Yosemite zu tun, sollte einfach sein, da es darum geht, nach Yosemite zu suchen und ein NSVisualEffectView
mit eingeschalteter Lebendigkeit einzufügen. Unter 10,8 / 10,9 dagegen ...
Ich könnte dieses Problem vollständig umgehen, indem ich die integrierte untere Balkenzeichnung von NSWindow nutze, aber die Farbzusammenführung ist optisch viel sauberer, verbindet die Steuerelemente viel stärker mit ihren übergeordneten Bereichen und scheint der Stil von zu sein Auswahl immer häufiger in diesen Tagen. Wenn es möglich ist, möchte ich es in meiner eigenen Anwendung verwenden.
Ich konnte dies erreichen, indem ich NSView abtrennte und KVO verwendete, um Farbänderungen zu beobachten, wenn sich der Schlüsselstatus des umschließenden Fensters änderte. Es funktioniert nicht am 10.10 aus den Gründen, die Sie erwähnt haben (Lebhaftigkeit), aber es funktioniert perfekt am 10.9.
Die Sourcelist Hintergrundfarben Thread auf der Apple Mailing List war was hat es für mich gelöst.
Schnittstelle:
%Vor%Implementierung:
%Vor%Sie müssen möglicherweise den Code in -awakeFromNib anderswo verschieben, je nachdem, wie Sie die Ansicht initialisieren.
Ich habe die Lösung gefunden: Ich lege eine NSBox wie Sie, am unteren Rand der View auf der linken Seite der SplitView. Hier ist die Hierarchie meiner Ansichten:
Die Lösung besteht darin, die richtigen Parameter im Inspector der NSBox zu füllen:
Ich habe hier den Boxtyp auf benutzerdefiniert und die Füllfarbe auf weiß gesetzt.
Ich hoffe, diese Antwort hat dir geholfen.
Tags und Links objective-c macos cocoa nsbutton nsoutlineview