#objective-c #nstextfield
#objective-c #nstextfield
Вопрос:
Это, безусловно, должно быть легко, но я ничего не нашел в документе. Поведение, которое мне нужно, точно такое же, как при щелчке правой кнопкой мыши на любой части текста, а затем вы можете выполнить с ним некоторые действия. На данный момент у меня есть собственный пользовательский класс NSTextField, который повторно реализует действие «Наведение курсора мыши». Эта часть работает! Я думал, что смогу получить выделенную часть текста моего nstextfield благодаря ‘theEvent’, но, видимо, это невозможно.
Ответ №1:
На самом деле я не думаю, что вы можете сделать это с помощью NSTextField. Я думаю, что вместо этого вам нужно использовать NSTextView, а затем использовать -selectedRanges
метод.
РЕДАКТИРОВАТЬ: я должен был сказать, что вы не можете сделать это напрямую (т. Е. для этого нет метода NSTextField). Я думаю, скорее, вам нужно использовать редактор полей (который сам по себе является NSTextView), связанный с окном, чтобы сделать это. Вот руководство Apple по использованию редактора полей.
Комментарии:
1. Да, я думал об этом… но я бы предпочел остаться со своим NSTextField… Но опять же, многие приложения могут делать это в NSTextField… Итак, мне было интересно…
2. прохладный. я отредактировал свой приведенный выше ответ, чтобы быть (надеюсь) более полезным.
3. Это кажется довольно интересным! Спасибо!
4. Неработающая ссылка; обновлена = developer.apple.com/library/mac/documentation/TextFonts / …
Ответ №2:
NSString *selectedText = ((NSTextFieldCell*)textField.selectedCell).stringValue;
Ответ №3:
Добавляя к ответу @Sean, я использую следующее решение для получения / изменения выделенного текста в NSTextField:
- (BOOL) replaceSelectionOfField:(NSTextField *)textField withString:(NSString *)replacement {
NSText * editor = [self.view.window fieldEditor:NO forObject:textField];
if (editor) {
NSRange rng = editor.selectedRange;
if (rng.location != NSNotFound) {
[editor replaceCharactersInRange:rng withString:replacement];
return YES;
}
}
return NO;
}
Если эта функция возвращает NO
, либо нет редактора полей (текстовое поле может не иметь фокуса), либо нет выделения.