Beispielcode zum Erstellen eines NSTextField "Label"?
In meinem desktop-Mac-OS-X-app, ich möchte ein Programm erstellen, ein NSTextField "label", die hat das gleiche Verhalten und die Eigenschaften eines typischen label erstellt und im Interface-Builder.
Normalerweise verwende ich (und sehr gerne) IB, aber in diesem Fall ist es muss erfolgen programmgesteuert.
Versuchen, wie ich könnte, ich kann nicht scheinen zu finden, die Kombination von Methode aufruft, wird ein Programm produzieren, das gleiche label-y-Verhalten als ein "Label" - gezogen aus der IB-Ansicht "Bibliothek".
Kann jemand bieten oder zeigen einige Beispiel-code, wie dies programmatisch? Thx.
InformationsquelleAutor der Frage Todd Ditchendorf | 2009-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem label ist tatsächlich eine Instanz NSTextFieldeine Unterklasse von NSView. So, da es ein NSView, es muss Hinzugefügt werden, um zu einer anderen Ansicht.
Hier ist eine funktionierende code:
InformationsquelleAutor der Antwort Thibault Martin-Lagardette
macOS 10.12 und Später
Beginnend mit macOS 10.12 (Sierra), gibt es drei neue
NSTextField
Konstruktoren:NSTextField(labelWithString:)
die die header-Datei der Kommentar sagt, "Erzeugt eine nicht-Verpackung, nicht editierbaren, nicht auswählbaren text Feld text in der Standardschriftart des Systems."NSTextField(wrappingLabelWithString:)
die die header-Datei der Kommentar sagt, "Erzeugt eine Verpackung, die nicht bearbeitet werden, auswählbares Textfeld, wird der text in der Standardschriftart des Systems."NSTextField(labelWithAttributedString:)
die die header-Datei der Kommentar sagt, “Erzeugt eine nicht editierbaren, nicht auswählbaren text-Feld zugeschrieben text. Der line-break-Modus in diesem Feld wird bestimmt, indem der attributierten string s NSParagraphStyle Attribut."Getestet habe ich diejenigen, die einen einfachen (nicht-zugeschrieben string), und erstellen Sie Textfelder, die sind ähnlich, aber nicht genau das gleiche wie die text-Felder in einem storyboard oder xib.
Der wichtige Unterschied ist, dass beide Konstruktoren erstellen Sie ein Textfeld mit
textBackgroundColor
(normalerweise pure white) als Hintergrundfarbe, während die storyboard-text-Feld verwendetcontrolColor
(in der Regel etwa 90% weiß).Unwichtig, beide Konstruktoren legen Sie Ihre Schriften durch den Aufruf
NSFont.systemFont(ofSize: 0)
(was produziert eine andereNSFont
Objekt als meinen code unten, aber Sie wickeln die gleichen zugrunde liegenden Core-Text-Schrift).Den
wrappingLabelWithString:
Konstruktor setzt das FeldisSelectable
zutrue
. (Dies ist dokumentiert in der header-Datei.)macOS 10.11 und Früher
Ich im Vergleich vier
NSTextField
Instanzen: erstellt durch ziehen Sie ein "Label" ein storyboard, ein weiteres erstellt, indem zunächst ein "Wrapping Label", um ein storyboard, und zwei im code. Dann habe ich gezielt veränderten Eigenschaften der code-erstellt Etiketten, bis alle Ihre Eigenschaften waren genau die gleichen, wie das storyboard erstellte Etiketten. Diese beiden Methoden sind die Folge:Wenn Sie eine der folgenden Methoden verwenden, vergessen Sie nicht, stellen Sie Ihre Feld-Rahmen, oder drehen Sie den
translatesAutoresizingMaskIntoConstraints
und fügen Sie Einschränkungen.Hier ist der code, den ich verwendet, um zu vergleichen, die verschiedene Textfelder, in Fall, dass Sie wollen, um zu überprüfen:
InformationsquelleAutor der Antwort rob mayoff
Dies kann schwierig sein, um richtig zu machen. Ich habe nicht das Rezept für eine exakte Nachbildung praktisch, aber wenn ich stecken in einer ähnlichen situation, hier ist was ich tun:
Mit Blick auf all die unzähligen Werte, kann man eine Menge Vermutungen über das, was Sie sind, zu vernachlässigen. In der Regel endet es damit, einige Magische Kombination von Blende und Rahmen-Einstellungen, die Sie bekommt, wo Sie sein möchten.
InformationsquelleAutor der Antwort danielpunkass
Sie könnten versuchen, mit nib2objc erhalten alle Eigenschaften, die IB-sets
InformationsquelleAutor der Antwort g-Off
Speziell, Sie wollen
setBordered:NO
und legen Sie die Blende Stil, was auch immer, Lünette Stil ist, die ich vergessen habe. AuchsetEditable:NO
und OptionalsetSelectable:NO
. Das sollte ausreichen.InformationsquelleAutor der Antwort Steven Degutis
Zerlegt AppKit in Objective-C:
InformationsquelleAutor der Antwort Stream