Какао: как реализовать собственный NSView с редактируемой текстовой областью? - PullRequest
3 голосов
/ 27 мая 2010

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

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

Ответы [ 3 ]

1 голос
/ 27 мая 2010

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

1 голос
/ 11 ноября 2010

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

После того, как пользователь завершит редактирование, вам нужно позвонить endEditing: на вашу ячейку.

1 голос
/ 27 мая 2010

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

  1. Сделать NSView.
  2. Поместите в него поле NSTextField.

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

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

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

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

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

...