2012-04-18 8 views
18

I Kakao app erschaffe, in denen ich NSTextField wie dies programmatisch erstellt,NSTextField Vertikale Ausrichtung

NSView *superView = [[NSView alloc] initWithFrame:NSMakeRect(0, 300, 1400, 500)]; 
NSTextField *myTextField = [[NSTextField alloc] initWithFrame:NSMakeRect(180, 100, 1000, 300)]; 
[myTextField setStringValue:myText]; 
[myTextField setEditable:NO]; 
[myTextField setBezeled:NO]; 
[myTextField setDrawsBackground:NO]; 
[myTextField setSelectable:NO]; 
[myTextField setFont:[NSFont fontWithName:@"Futura" size:22]]; 
[superView addSubview:myTextField]; 
[superView setAutoresizesSubviews:YES]; 
[myTextField setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; 
[self.window.contentView addSubview:superView]; 

Jetzt möchte ich die vertikale Ausrichtung meines Textes und es sollte nach Textlänge einstellbar sein.
Hat jemand irgendwelche Vorschläge? Bitte teilen Sie Ihren Vorschlag :)

Vielen Dank .. !!

Antwort

11

Was Sie wollen, ist möglich, aber Sie müssen eine Unterklasse von NSTextFieldCell erstellen und dann diese Unterklasse in Ihrem NSTextField verwenden. Die wichtigsten Methoden, die Sie außer Kraft setzen wollen, sind drawingRectForBounds:, selectWithFrame: und editWithFrame:

Here is a blog post from the fantastic Daniel Jalkut darüber, er auch eine herunterladbare Version bereit umfasst zu gehen. Der Beitrag ist ziemlich alt, aber es sollte immer noch gut funktionieren.

+0

Danke sosborn .. !! Lass mich das versuchen .. Ich melde mich bei Problemen. :) – iUser

+0

Ok, ich habe 'RSVerticallyCenteredTextFieldCell.h' und' RSVerticallyCenteredTextFieldCell.m' Klasse, aber ich weiß nicht, wie man es benutzt, mit meinem 'myTextField'. – iUser

+0

Werfen Sie einen Blick auf das NSControl (Von dem NSTextField erbt). Es hat eine Methode namens setCellClass :. Der Control and Cell Programming Guide Doc von Apple ist auch gut zu lesen. – sosborn

1

Um das Textfeld an die Stringgröße anzupassen, müssen Sie vorher die Textgröße mit NSStringsizeWithFont: constrainedToSize: lineBreakMode: berechnen und dann die Größe des Textfelds mit dem Rahmen einstellen.

Für die vertikale Ausrichtung betrachten Sie diese question (und die Antworten).

+1

@iUser fragt nach NSTextField, das sich von UITextField unterscheidet. NSTextField verfügt nicht über die Eigenschaft contentVerticalAlignment. – sosborn

+0

Danke Kai .. !! Ich benutze 'NSTextField', das keine 'contentVerticalAlignment'-Option gibt. Irgendein Vorschlag ? – iUser

+0

Entschuldigung. Ich habe gerade meine Antwort geändert. –

-1

überschreiben ViewWillDraw und positionieren Sie Ihr NSTextField in der Mitte der übergeordneten Ansicht an diesem Punkt. Dies funktioniert auch mit Live-Größenanpassung. Sie können an dieser Stelle auch die Schriftgröße anpassen, um eine Schriftart zu finden, die der neuen Größe entspricht.

+0

erklären Sie Ihr Downvote und beachten Sie, dass dies im Jahr 2015 beantwortet wurde. Dies ist ähnlich der akzeptierten Antwort, nur dass, anstatt die benutzerdefinierte Zeichnung in der NSTextFieldCell, machen Sie es in der NSTextField ... –