2015-12-16 3 views
1

Мое приложение OS X, написанное на Objective-C, должно отображать переменную NSString* переменную theString, которая может стать довольно большой.Замена NSTextField на NSScrollView для получения полосы прокрутки

Я использую Xcode IB для создания файла острия, который отображает theString в NSTextField* объекта panel объявленной внутри AppDelegate.h как это:

@property (weak) IBOutlet NSTextField *panel; 

Теперь я могу установить содержание panel внутри AppDelegate.m, как это :

self.panel.stringValue = theString; 

Это все работает нормально. Но теперь я хочу, чтобы мое текстовое поле было полосой прокрутки. Так вместо «текстовое поле» Я выбираю «Text View» из библиотеки объектов, и получить его синюю линию, чтобы сформировать мне новую декларацию panel которая теперь выглядит следующим образом:

@property (weak) IBOutlet NSScrollView *panel; 

Теперь это не больше работы:

self.panel.stringValue = theString; 

поднимая ошибку: (!) Property 'stringValue' not found on object of type 'NSScrollView*'

Как мне нужно FixUp это заявление?

(Могу я просто сказать, что я нахожу обширную документацию Apple по теме «byzantine» и «opaque». Почему я наивна, чтобы ожидать простого ответа на этот простой вопрос, поскольку все это, кажется, подразумевает? - что это?)

+0

Вместо этого используйте 'string'-свойство (смените тип выпуска как' NSTextView'). – Astoria

+0

@astoria - Прошу прощения, я полностью забыл ваш комментарий. Ты мертв, и это ответ, который я с тех пор обнаружил. (И вам нужно изменить (слабый) на (сильный) тоже) –

ответ

0

Что вы получили, это NSTextView, завернутый в NSScrollView. ScrollView - это то, что делает полосы прокрутки, которые вы хотите. Он в основном имеет потенциально более крупный вид внутри своего окна просмотра и показывает только малую его часть, которую вы можете перемещать с помощью полос прокрутки. Вам нужно получить (другую) ссылку из вашего кода в NSTextView внутри scrollView. Вы можете найти NSTextView в иерархии в IB и приложить к этому.

Это в направлении того, что вы хотите, но я думаю, что не совсем то, что вам нужно. TextView - гораздо более продвинутый элемент управления, чем простой текстовый фильтр и, вероятно, больше, чем вам нужно. Вместо этого вы можете использовать пользовательский вид, взяв NSScrollView, который поставляется с NSView по умолчанию, завернутым внутри. Затем вместо NSTextView поместите NSTextField в NSView. Проблема заключается в том, что тогда вам нужно добавить код для автоматического изменения размера NSTextField и NSView на основе содержимого текстового поля. После того, как вы отсортированы, scrollView автоматически организует необходимые полосы прокрутки.

+0

NSScrollView из библиотеки объектов уже имеет NSView. – Willeke

+0

Да, конечно, вы правы. Я был в состоянии перестройки управления уже в проекте, вырывая NSTextView и вставляя NSView. Я согласен, что чище и безопаснее удалить всю вещь и начать с NSScrollView со встроенным NSView. Соответственно отредактировал ответ. – pco494

+0

«Что вы получили, это NSTextView, обернутый внутри NSScrollView» - да, это только то, что IB-библиотека объектов говорит мне заранее. Но как я собираюсь попасть в базовый NSTextView, чтобы получить/установить его свойство «string»? –

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