У меня есть подкласс NSTextField
, который использует подкласс NSTextFieldCell
, который содержит приписанную строку. Мне бы хотелось, чтобы, когда пользователь копирует текст, который будет скопирован в монтажную панель без атрибутов.
Я попытался создать подкласс NSTextView
, переопределить copy:
и установить isFieldEditor
в YES
и вернуть этот новый редактор из метода клеток fieldEditorForView
. Хотя это копирует только простой текст всякий раз, когда он используется, у меня есть текст, нарисованный на тексте, нарисованном на тексте (и так далее ...), и если основная приписанная строка изменяется другим элементом управления, редактор поля остается неизменным. Когда я не использую MyFieldEditor
и позволяю подклассу NSTextFieldCell
использовать реализацию по умолчанию, эта проблема не возникает.
Есть ли более простое решение этой проблемы?
Есть ли что-то дополнительное? что мне нужно переопределить или получить сообщения делегата для?
MyFieldCell.m
- (NSTextView *)fieldEditorForView:(NSView *)controlView
{
MyFieldEditor *editor = [[MyFieldEditor alloc] init];
[super setUpFieldEditorAttributes:editor];
return editor;
}
MyFieldEditor.m
@implementation MyFieldEditor
- (instancetype)init
{
if ( (self = [super init]) )
{
[self setFieldEditor:YES];
}
return self;
}
- (NSString *)selectedString
{
return [[self string] substringWithRange:[self selectedRange]];
}
- (void)copy:(id)sender
{
[[NSPasteboard generalPasteboard] setString:[self selectedString] forType:NSPasteboardTypeString];
}
@end
Примечание: я использую AR C .
Показать изображение проблемы