Ich habe die Apple-Dokumentation über NSButtons und Zellen gelesen und ich kann den Unterschied zwischen den beiden wirklich nicht verstehen. Zusätzlich zu dieser Komplexität sieht es so aus, als hätten beide eine große Überlappung von Methoden wie setTitle:
usw. und ich bin mir nicht sicher, welche ich verwenden soll.
Kann jemand erklären, was die grundlegenden Unterschiede sind?
Danke, Danke Teja
Sie können sich ein Steuerelement als Vertreter einer Zelle vorstellen, oder "Agent". 1 Das Steuerelement ist ein NSView
, was unter diesen Umständen zwei wichtige Dinge bedeutet. Erstens, dass es einen Bereich eines einzufügenden Fensters darstellt. Zweitens, dass es Benutzerinteraktion akzeptiert. 2
Die Steuerung macht jedoch selbst nicht viel. Die Zelle ist die Sache, die die ganze Arbeit erledigt - beachte zum Beispiel, dass Zellen sich in einen gegebenen Rahmen zeichnen können. Dies liegt in der Verantwortung einer Ansicht, aber die Steuerung verschiebt dies an die Zelle und stellt einfach einen Bereich zum Zeichnen bereit.
Wenn ein Benutzer auf ein Steuerelement klickt, empfängt das Steuerelement das Ereignis und ermittelt, was es bedeutet, aber die Arbeit, eine Aktion als Reaktion auf das Ereignis auszuführen, wird an die Zelle weitergegeben.
Wenn Sie sich die Dokumente für verschiedene Kontroll- / Zellpaare anschauen ( NSButton
und NSButtonCell
sind ein solches Paar), werden Sie die "Cover" -Methoden erwähnen. Dies bedeutet, dass das Steuerelement Methoden mit den gleichen Namen wie seine Gegenstückzelle hat, die einfach zu den Zellen aufrufen. Das ist die Quelle der Duplikation, die du erwähnt hast. Wenn Sie eine dieser Methoden verwenden möchten, rufen Sie sie auf dem Steuerelement auf - als öffentliches Gesicht des Paares wird sie die Zelle wahrscheinlich sowieso fragen.
Die beste von Apple zur Verfügung gestellte Beschreibung der Interaktion lautet " Wie Steuerelemente und Zellen interagieren " im Handbuch zu Steuerungs- und Zellprogrammierungsthemen.
1 Im Sinne eines Schauspielers mit einem Agenten, der Gigs beschafft. Dies ist nicht streng wahr von allen Ansichten; es ist tatsächlich eine Funktion von NSResponder
, von der NSView
erbt.
Auszug aus Cocoa Programming für OS X: Der Leitfaden für den Big Nerd Ranch
"Eine Zelle behandelt die Implementierungsdetails des Steuerelements. Für die Zum größten Teil werden die Eigenschaften und Methoden der Zelle durch "abgedeckt" identische Eigenschaften und Methoden in der entsprechenden Kontrolle. Zum Wenn Sie beispielsweise den Titel eines Labels ändern, lautet die Zelle des Labels macht die Arbeit, aber Sie interagieren mit dem StringValue des Labels Eigentum.
Zellen haben eine lange Geschichte in Kakao. Sie waren ursprünglich hinzugefügt, um Leistungsprobleme zu beheben: viele der grundlegenden Aufgaben von a Kontrolle wurde an die Zelle übergeben, die könnte sie mehr tun effizienter als die Kontrolle.
Mac-Computer sind viel leistungsfähiger als sie damals waren, und Zellen sind zu einer Belastung geworden. Apple hat erklärt, dass es Zellen veraltet, aber Sie sehen sie immer noch in Ihrem Dokumentumriss und in älterem Code. "
NSButtonCell
ist eine Unterklasse von NSActionCell
, die zur Implementierung der Benutzerschnittstellen von Drucktasten, Schaltern und Optionsfeldern verwendet wird. Es kann auch für jede andere Region einer Ansicht verwendet werden, die eine Nachricht an ein Ziel senden soll, wenn darauf geklickt wird.
Die NSButton
Unterklasse von NSControl
verwendet eine einzelne NSButtonCell
. Um Gruppen von Switches oder Optionsfeldern zu erstellen, verwenden Sie NSMatrix
mit einem Satz von NSButtonCell
s.
NSButton Cell hat viel mehr cutomizable Optionen für Zeichnen und Verhalten. Die Unterschiede sind besser in den Klassen ersichtlich, von denen sie erben (NSButtonCell erbt von der ActionCell-Klasse, während NSButton von der NSControl-Klasse erbt.)
Sehen Sie sich die Dokumentation besser an:
Sie sollten auswählen, wie Sie die Schaltflächen zeichnen und wie sie sich verhalten sollen. Wenn es eine einfache Schaltfläche ist, verwenden Sie NSButton.
Tags und Links macos cocoa nsbutton nsbuttoncell