2012-04-18 2 views
18

Я создаю какао приложение, в котором я создал NSTextField программно, как это,NSTextField Вертикальное выравнивание

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]; 

Теперь я хочу вертикальное выравнивание моего текста, и она должна быть регулируемой по длине текста.
У кого-нибудь есть предложения? Пожалуйста, поделитесь своим предложением :)

Большое спасибо .. !!

ответ

11

Возможно, вы захотите сделать подкласс NSTextFieldCell, а затем использовать этот подкласс в своем NSTextField. Основные методы, которые вы хотите переопределить это drawingRectForBounds:, selectWithFrame: и editWithFrame:

Here is a blog post from the fantastic Daniel Jalkut об этом, он даже включает в себя загружаемая версия готова к работе. Должность довольно старая, но она все равно должна работать нормально.

+0

Спасибо sosborn .. !! Позвольте мне попробовать это. Я вернусь к вам, если возникнут какие-либо проблемы. :) – iUser

+0

Хорошо, у меня есть 'RSVerticallyCenteredTextFieldCell.h' и' RSVerticallyCenteredTextFieldCell.m', но я не знаю, как его использовать, с моим myTextField. – iUser

+0

Взгляните на NSControl (из которого наследуется NSTextField). Он имеет метод setCellClass :. Также хорошо читать документ руководства по управлению и программированию сотовой сети Apple. – sosborn

1

Для настройки текстового поля на размер строки вам необходимо рассчитать размер текста с помощью NSString's sizeWithFont: constrainedToSize: lineBreakMode: до и после этого отрегулируйте размер текстового поля с установкой рамки.

Для вертикального выравнивания смотрите question (и ответы).

+1

@iUser спрашивает о NSTextField, который отличается от UITextField. NSTextField не имеет свойства contentVerticalAlignment. – sosborn

+0

Thanx Kai .. !! Я использую 'NSTextField', который не предоставляет параметр' contentVerticalAlignment'. Любое предложение ? – iUser

+0

Извините. Я просто изменил свой ответ. –

-1

переопределить ViewWillДобавить и разместить свой NSTextField в центре его родительского вида в этой точке. Это также работает с живым изменением размера. Вы также можете настроить размер шрифта в этот момент, чтобы найти шрифт, который соответствует новому размеру.

+0

объясните ваш downvote и обратите внимание, что на это был дан ответ в 2015 году. Это похоже на принятый ответ, просто чтобы вместо создания пользовательского чертежа в NSTextFieldCell вы делаете это в NSTextField ... –

Смежные вопросы