2010-05-27 2 views
3

Какова минимальная реализация, необходимая для создания пользовательского NSView с редактируемой текстовой областью? Я предполагаю, что для этого можно использовать NSTextFieldCell. Мне удалось нарисовать ячейку в представлении (что прямолинейно), но для его редактирования возможно требуется более сложная координация между представлением и ячейкой. Есть ли где-нибудь код кода?Какао: как реализовать пользовательский NSView с редактируемой текстовой областью?

Обновление. Я должен был четко указать, что моя долгосрочная цель состоит в том, чтобы иметь еще много редактируемых текстовых областей на одном и том же представлении. AFAIU лучше использовать ячейки в этом случае, поскольку они более легкие, чем полноразмерные представления. Мой обновленный вопрос: какова минимальная реализация, необходимая для создания пользовательского NSView с редактируемой текстовой областью с использованием соответствующего NSCell?

ответ

1

Какая минимальная реализация необходима для создания пользовательского NSView с редактируемой текстовой областью?

  1. Сделайте NSView.
  2. Put an NSTextField in it.

Помните, NSViews (пользовательскую или иным образом), может содержать другие NSViews, и NSTextField является своим родом NSView.

Если вы не хотите, чтобы код вне класса пользовательского вида знал о текстовом поле, и это, вероятно, не должно, пользовательское представление может создавать текстовое поле и добавлять его в себя как частную деталь реализации. Для этого просто не выставляйте текстовое поле в классе пользовательского вида @interface (кроме объявления переменной экземпляра, что неизбежно).

Пользовательский вид, конечно же, не должен рисовать везде, где он помещает свое текстовое поле. Он мог бы нарисовать там, но текстовое поле покроет его.

Я предполагаю, что для этого можно использовать NSTextFieldCell.

Да, если вы не возражаете против реализации NSTextField. Добавление NSTextField в качестве подсмотра вашего представления намного проще.

+0

Спасибо за ответ! Вы хорошо понимаете, что использование NSTextField возможно и будет проще. Но я думаю, что лучше использовать ячейки, когда я добавлю редактируемые области текста в пользовательский вид. Я обновил вопрос, чтобы отразить это. – Rinzwind

+0

Rinzwind: Я до сих пор не понимаю, почему вы хотите использовать ячейки для этого. Вы можете иметь несколько подзонов. –

+0

Я понимаю, что вы также можете иметь несколько подзонов.Я действительно ценю ваше предложение «немного отступить» и вопрос о том, действительно ли использование ячеек напрямую - это путь, но давайте рассмотрим это как данность на данный момент. Я все равно хотел бы знать, как координировать между пользовательским NSView и соответствующим стандартным подклассом NSCell для редактирования текста. Я еще не нашел ясного объяснения этого в документах Apple. Существует пример проекта по созданию пользовательского представления и пользовательской ячейки, отображающей циферблат часов, но AFAIK он не выполняет никакого редактирования текста (+ ему требуется 10.6, которого у меня нет) – Rinzwind

1

Если вы хотите создать сетку текстовых полей (возможно, с их динамическим числом), используйте NSMatrix из NSTextFieldCells. Разумеется, вы можете добавить NSMatrix в качестве подвид вашего пользовательского представления.

1

Если вы хотите отредактировать текстовую ячейку, просто вызовите editWithFrame:inView:editor:delegate:event: на объект ячейки. Этот метод требует, чтобы NSEvent начал редактирование, поэтому вы можете вызывать это только из обработчика события. Также есть selectWithFrame:inView:editor:delegate:start:length:, который устанавливает редактор полей с выбором. Вы можете использовать это, если вам нужно начать редактирование извне обработчика событий.

После завершения редактирования вам необходимо позвонить endEditing: в свою камеру.

+0

Ну, вы можете вручную инициализировать событие и передать его '-editWith ...' – 11684

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