Направете NSTextField възможност за превъртане

Разработвам примерно приложение за OSX. Искам текстова област, където потребителят може да въвежда и редактира текст. Искам текстовата област да нараства с увеличаването на броя на знаците и искам да направя текстовата област да може да се превърта и да запазя височината й фиксирана, след като надхвърли определена дължина. Използвам NSTextField за тази цел. Но не мога да го направя да може да се превърта. Също така се опитах да използвам превъртащ се NSTextView вътре в scrollview за тази цел. NSTextField не ми позволява да задам шрифта и размера на шрифта чрез създателя на интерфейс.


person hcnimkar    schedule 25.04.2016    source източник
comment
NSTextField не трябва да може да се превърта (както сте открили). Това е само за един ред. NSTextView е правилният изглед за това, което се опитвате да постигнете. Все пак не казвате какво NSTextView не работи за вас. Бихте ли могли да бъдете по-конкретни - и може би да публикувате някакъв код, за да видим какво правите?   -  person headbanger    schedule 25.04.2016
comment
@headbanger По принцип искам NSTextView да расте с нарастването на текста, но само до някаква височина. След това искам да превъртя. Как мога да постигна това? Мога ли все пак да изчисля височината, изисквана от NSTextView по време на изпълнение?   -  person hcnimkar    schedule 25.04.2016


Отговори (1)


Първо, както разбрахте, трябва да изчислите височината на текста. Apple има инструкциите, от които се нуждаете тук: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TextLayout/Tasks/StringHeight.html

След това трябва да промените рамката или ограниченията (ако използвате автоматично оформление) на NSTextView, за да коригирате размера до предварително зададен максимум.

Ако бях на ваше място, бих подкласирал NSTextView и след това бих заменил keyDown: така че размерът да се преизчислява при всяка промяна на текста. Да, може да не е най-ефективното решение - но имате излишна енергия и това е хубаво лесно решение.

Що се отнася до настройката на шрифта, трябва да зададете шрифта в textstorage - не в изгледа. Ето как да го направите:

[textview.textStorage setFont:[NSFont fontWithName:@"Helvetica" size:12]];

Ако това не работи за вас, можете ли да публикувате кода, който не работи?

person headbanger    schedule 25.04.2016
comment
Да Благодаря :) Ще го направя - person hcnimkar; 25.04.2016
comment
Въпреки това не мога да променя шрифта за NSTextView - person hcnimkar; 25.04.2016
comment
Вместо подклас на NSTextView бих използвал делегата и бих имплементирал textDidChange:. NSTextView расте, когато текстът се промени. Трябва да преоразмерите изгледа за превъртане. - person Willeke; 25.04.2016