Содержание
Как изменить цвет курсора для NSTextField
Данный способ изменения цвета курсора для редактора полей не требует создания подкласса. Все работает в основном классе. Но у данного ниже способа есть один недостаток. Редактор полей - это один объект NSTextView, который является общим для всех текстовых полей в окне. Редактор полей совместно используется всеми элементами управления в окне для редактирования текста. Поэтому цвет курсора изменится сразу для всех полей. Чтобы установить свой цвет для каждого отдельного поля, необходимо создавать подкласс для NSTextField.
Итак. На самом деле NSText *, возвращаемый currentEditor для NSTextField, всегда является NSTextView *. Поэтому вы можете получить доступ к редактору полей используя метод экземпляра fieldEditor:forObject: через любой существующий объект текстового поля. Данный код необходимо размещать в viewDidAppear.
// Изменить цвет курсора для всех полей. NSTextField* textField = currTextField; NSColor *insertionPointColor = [NSColor redColor]; NSTextView *fieldEditor = (NSTextView*)[textField.window fieldEditor:YES forObject:textField]; fieldEditor.insertionPointColor = insertionPointColor;
Вариант в одну строку
// Изменить цвет курсора для всех полей [(NSTextView*)[currTextField.window fieldEditor:YES forObject:currTextField] setInsertionPointColor:[NSColor blueColor]];
Узнать позицию курсора NSTextField
NSInteger insertionPoint = [[textField currentEditor] selectedRange].location; NSLog(@"insertionPoint: %ld", (long)insertionPoint);
Установить курсор, снять выделение или выделить текст в NSTextField
// Выделяем первый символ текста. NSRange txtRange = NSMakeRange(0, 1); [[textField currentEditor] setSelectedRange:txtRange];
Установить курсор в конец NSTextField
// macOS 10.14+ [[textField currentEditor] moveToEndOfLine:nil]; // Общий способ. Узнаем длину текста. [[textField currentEditor] setSelectedRange:NSMakeRange([[textField stringValue] length], 0)];