Сделать NSTextField прокручиваемым

Я разрабатываю пример приложения для OSX. Мне нужна текстовая область, где пользователь может вводить и редактировать текст. Я хочу, чтобы текстовая область росла по мере увеличения количества символов, и я хочу сделать текстовую область прокручиваемой и сохранить фиксированную высоту после того, как она превысит определенную длину. Я использую NSTextField для этой цели. Но я не могу сделать его прокручиваемым. Также я попытался использовать прокручиваемый NSTextView внутри прокрутки для этой цели. 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:, чтобы размер пересчитывался всякий раз, когда текст изменяется. Да, это может быть не самое эффективное решение, но у вас есть лишняя мощность, и это легко исправить.

Что касается установки шрифта, вам нужно установить шрифт в текстовом хранилище, а не в представлении. Вот как это сделать:

[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