Работа с курсором в NSTextField Objective C — Xcode Mac OS

Как изменить цвет курсора для 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)];

 

 

 

 

 

 

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *