2010-03-07 23 views
25

Könnte mir jemand erklären, was die Hauptunterschiede zwischen NSTextField und NSTextView sind? Ich weiß, dass NSTextView hat mehr Funktionen und wird in der Regel für längere Texte verwendet, und NSTextField wird normalerweise für Ein-Zeilen-Textfelder verwendet, aber wenn ich richtig verstehe, kann NSTextField auch mit attributierten Strings und mit mehreren Zeilen verwendet werden ...NSTextField oder NSTextView?

Was ich speziell brauche, ist ein Steuerelement, das den Text von Nachrichten in einer Timeline-Ansicht wie in Tweetie oder einer ähnlichen Software anzeigen würde. Die einzigen Voraussetzungen ich habe, sind:

  • sollte es Text in etwa 1-4 Zeilen anzeigen
  • es in der Lage sein sollte Links im Text zu zeigen (wie ich sie verstehe, sollte dies in den beiden Kontrollen einfach sein - http://developer.apple.com/mac/library/qa/qa2006/qa1487.html)
  • sollte es den Benutzer wählen und kopieren Sie den Text
  • es sollte nicht lassen Sie den Benutzer den Text scrollen, bearbeiten Sie den Text, oder zeigen Sie das Kontextmenü, das normalerweise in bearbeitbaren Textfeldern angezeigt wird, sollte es nicht einmal angezeigt ein Textcursor in diesem Feld

Mit solchen Anforderungen ist es besser für mich, ein NSTextField oder NSTextView zu verwenden? Ist NSTextField gut genug oder hat NSTextView etwas Wichtiges, das NSTextField nicht hat?

Antwort

32

Könnte mir jemand erklären, was die Hauptunterschiede zwischen NSTextField und NSTextView sind? Ich weiß, dass NSTextView hat mehr Funktionen und wird in der Regel für längere Texte verwendet, und NSTextField wird normalerweise für Ein-Zeilen-Textfelder verwendet, aber wenn ich richtig verstehe, kann NSTextField auch mit attributierten Strings und mit mehreren Zeilen verwendet werden ...

Technisch stimmt, aber Sie verwenden normalerweise Textfelder für Werte, die nur Text und normalerweise nur eine Zeile sind. (Handle mehrere Zeilen, wie ein Textfeld sie annehmen kann. Wenn nichts anderes, die Zeilenumbrüche in einer Art und Weise Streifen, die Sinn macht für das, was Sie mit dem Text tust.)

  • sollte Text anzeigen in etwa 1-4 Zeilen

NSTextView.

NSTextView. Das Unterstützen von Links in einem NSTextField ist schwierig.

  • sollte der Benutzer lassen auswählen und kopieren Sie den Text

Entweder wird für diese Arbeit.

  • es NICHT der Benutzer den Text,
  • bewegen lassen sollten

NSTextField oder NSTextView ohne NSScrollView. Sie können Letzteres in IB durchführen, indem Sie eine Textansicht aus der Bibliothek ziehen und dann im Menü "Layout" die Option "Nicht eingebettete Objekte" wählen.

bearbeiten Sie den Text,

Entweder wird für diese Arbeit.

oder das Kontextmenü anzuzeigen, die in der Regel in editierbaren Textfeldern angezeigt wird,

Ja, es sollte. Sie sollten immer Menüpunkte wie "Kopieren" und "Nur-Lesen" -Dienste anbieten. Jede Kontrolle sollte das für Sie tun; Bekämpfe das nicht.

sollte es nicht einmal einen Textcursor in diesem Bereich für diese

Entweder zeigen wird funktionieren.

Wenn Sie die Auswahl aktiviert lassen (was Sie normalerweise tun sollten), zeigen sie einen Cursor, wenn der Benutzer in das Feld klickt. Dies ist ein Feature, da es angibt, wo der Auswahlanker für die Auswahl von Shift-⌘-Pfeilen steht.

Mit solchen Anforderungen ist es besser für mich, ein NSTextField oder NSTextView zu verwenden?

Ich würde NSTextView verwenden.

+1

Danke für die Info. Sieht so aus, als ob alles jetzt gut funktioniert, ich habe es auch geschafft, den Textcursor mit sentDrawInsertionPoint zu deaktivieren. Eine Sache, die ich nicht tun konnte, war, sie zu überzeugen, immer einen Pfeilcursor anstelle des X-förmigen zu zeigen, aber ich kann damit leben ... –

+1

@Pionides: X-förmig? Du meinst den I-Balken? Sie könnten versuchen, "discardCursorRects" an die Textansicht zu senden. –