Как я могу заставить NSTextField вести себя как текст HTML? - PullRequest
0 голосов
/ 22 февраля 2011

У меня есть некоторый статический текст, обычно длиной всего 1 строка, который отображается в NSTextField в моей xib. В некоторых случаях текст достаточно длинный, чтобы оправдать две строки, и я просто хочу, чтобы размер метки изменялся по вертикали, чтобы он соответствовал ей, не предоставляя мне скроллеры или что-либо еще. Подумайте о том, как ведет себя текст на веб-странице ... это то, что я хочу. Я просто хочу, чтобы ярлык стал уменьшаться с другим текстом и с корректировкой его ширины. Как мне этого добиться?



ОБНОВЛЕНИЕ
Вот видео о том, как оно ведет себя в настоящее время: http://screencast.com/t/4JYTv7jVG3O

Обратите внимание, что когда NSTextField имеет длину в две строки, под текстом появляется большой пробел. Это потому, что звезды и кнопки выровнены внизу рамки, и потому что мне нужно, чтобы рамка была выше, чтобы вместить 2 строки, они остаются там. Если бы я мог получить ответ на этот вопрос, я бы сделал рамку короче для текста в 1 строку и увеличил нижнее текстовое поле (с меньшим текстом), чтобы компенсировать это. Можно ли сделать этот тип плавающего макета?

1 Ответ

0 голосов
/ 22 февраля 2011

Один из вариантов - использовать WebView для отображения вашего контента.Затем вы получите именно то поведение, которое ожидаете, за счет небольшой работы по управлению взаимодействием с элементами управления.

Вам нужно установить WebView для отображения без фона, используя [webView setDrawsBackground:NO].

Вам также необходимо создать контент (включая рейтинг звезды и кнопку), используяHTML / CSS, а затем используйте мост Objective-C / JavaScript для обратного вызова вашего приложения при нажатии кнопки.

Для получения дополнительной информации о вызове Objective-C из JavaScript см. здесь .

Возможно, вы также можете использовать NSTextView и встраивать кнопку и рейтинг звезды как NSTextAttachment объекты, но это довольно сложно, было бы намного проще использовать WebView.

Единственная другая альтернатива, которую я вижу, - это написание контроллера представления, который управляет макетом элементов управления на основе текущего размера их представления контейнера.Вам нужно измерить текст, чтобы сделать это, и один из способов сделать это - использовать превосходную категорию NS (приписанную) String + Geometrics , написанную Джерри Криноком.

...