Я программировал iOS с самого начала, но я новичок в Cocoa, поэтому, пожалуйста, будьте осторожны!
У меня есть NSOutlineView, и я реализовал вырезание / копирование / вставку из главного меню, чтобы вырезать / скопировать / вставить выбранные строки.
Теперь я также хочу разрешить пользователю выбрать текст в NSTextFieldCell, скопировать его, поместить курсор в другой NSTextFieldCell и вставить его.
Мне удалось обнаружить, что пользователь работает внутри ячейки, установив BOOL в:
- (BOOL)outlineView:(NSOutlineView *)anOutlineView shouldEditTableColumn:(NSTableColumn*)aTableColumn item:(id)anItem
И отключив его в моем уведомлении об окончании редактирования, настроил следующим образом:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(editingDidEnd:)
name:NSControlTextDidEndEditingNotification object:nil];
Кажется, это нормально работает.
Затем в своих действиях вырезать, копировать, вставить я могу проверить BOOL и поступить правильно - скопировать целые строки, если пользователь не работает в ячейке, и скопировать текст, если пользователь работает в ячейке.
Однако я просто не могу понять, как получить то, что мне нужно, когда пользователь работает в ячейке.
Я подумал об использовании методов NSText cut :, copy: paste:, поскольку они должны обрабатывать выбор за меня. Но я не думаю, что у меня где-нибудь есть объект NSText!
В качестве альтернативы мне нужно иметь возможность прочитать выделенный текст из моего NSTextFieldCell, сохранить его, затем обнаружить точку вставки в ячейке, в которую нужно вставить, и вставить.
Или есть гораздо лучшая встроенная поддержка, которой мне не хватает?
Любая помощь, полученная с благодарностью - конечно, конкретные решения, но также ссылки на справочные руководства по обработке текста / ячеек / полей в Какао.
1 ответ
Как всегда, я нахожу решение сразу после публикации!
Ответ заключается в том, что редактор поля, NSTextView, является первым респондентом при редактировании ячейки. Его суперкласс, NSText, поддерживает функции cut :, copy: и paste :.
Итак, мои версии команд вырезания, копирования и вставки для редактирования ячеек выглядят так:
-(void)pasteTextToCell:(id)sender {
NSTextView* fieldEditor = (NSTextView*)[[appDelegate mainWindow] firstResponder];
[fieldEditor paste:sender];
}
-(void)copyTextFromCell:(id)sender {
NSTextView* fieldEditor = (NSTextView*)[[appDelegate mainWindow] firstResponder];
[fieldEditor copy:sender];
}
-(void)deleteTextFromCell:(id)sender {
NSTextView* fieldEditor = (NSTextView*)[[appDelegate mainWindow] firstResponder];
[fieldEditor cut:sender];
}
Похожие вопросы
Новые вопросы
cocoa
Cocoa - это среда разработки приложений Apple для macOS, состоящая из Foundation, Application Kit и Core Data. Используйте тег «Какао-touch» для вопросов iOS.