Я программировал 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
Jane Sales 1 Авг 2012 в 11:28

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];
}
2
Jane Sales 1 Авг 2012 в 12:18
Какой объект в вашем приложении Какао реализует вышеуказанные методы (например, pasteTextToCell :)? Они частные или имеют приоритетное значение? Кто им звонит?
 – 
jsbox
5 Май 2018 в 19:52