Как программно выбрать весь текст в UITextField?
Программно Выберите весь текст в UITextField
Ответ 1
Выключается, вызов -selectAll: с не-нильским отправителем отображает меню. Вызов его с помощью nil приводит к тому, что он выбирает текст, но не отображает меню.
Я попробовал это после того, как мой отчет об ошибке вернулся из Apple с предложением, что я передаю ноль вместо себя.
Не нужно гадать с UIMenuController или другими API-интерфейсами выбора.
Ответ 2
Вот что помогло:
[self.titleField setSelectedTextRange:[self.titleField textRangeFromPosition:self.titleField.beginningOfDocument toPosition:self.titleField.endOfDocument]];
Довольно уродливый, но он работает, поэтому не будет показан sharedMenuController!
Чтобы исправить проблему "только работает каждый второй раз", используйте следующую команду:
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
__strong __typeof(weakSelf) strongSelf = weakSelf;
UITextRange *range = [strongSelf textRangeFromPosition:strongSelf.beginningOfDocument toPosition:strongSelf.endOfDocument];
[strongSelf setSelectedTextRange:range];
});
Спасибо Эрик Бейкер (только что отредактированный здесь комментарий)
Ответ 3
Я только что проверил это, чтобы проверить комментарий Mirko выше, но мой тест проверяет, что selectAll:
действительно выбирает весь текст, когда он отправляется самому UITextField.
Обратите внимание, что текст будет немедленно закрыт CUT | КОПИРОВАТЬ | PASTE, но на ваш вопрос это именно то, что появляется, когда пользователь выбирает "Выбрать все" для начала.
Следующее решение, о котором идет речь, следует отметить, что вторая строка временно скрывает диалог CUT/COPY/PASTE, не отключая его для явных пользовательских выборов
[_myTextField selectAll:self];
[UIMenuController sharedMenuController].menuVisible = NO;
Ответ 4
Используйте то, что вам нужно
ObjC
[yourtextField becomeFirstResponder]; //puts cursor on text field
[yourtextField selectAll:nil]; //highlights text
[yourtextField selectAll:self]; //highlights text and shows menu(cut copy paste)
стриж
yourTextField.becomeFirstResponder() //puts cursor on text field
yourTextField.selectAll(nil) //highlights text
yourTextField.selectAll(self) //highlights text and shows menu(cut copy paste)
Ответ 5
Swift
Выберите весь текст в UITextField
:
textField.selectedTextRange = textField.textRangeFromPosition(textField.beginningOfDocument, toPosition: textField.endOfDocument)
Мой полный ответ здесь.
Ответ 6
Это лучшее решение, которое я нашел. Нет sharedMenuController, и он работает последовательно:
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
[textField performSelector:@selector(selectAll:) withObject:nil afterDelay:0.1];
}
Ответ 7
Чтобы иметь возможность выбирать текст, текстовое поле должно быть доступно для редактирования. Чтобы узнать, когда текстовое поле доступно для редактирования, используйте методы делегата:
- (void)textFieldDidBeginEditing:(UITextField *)textField
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
Я не думаю, что textFieldShouldBeginEditing: требуется, но это то, что я использовал в своей реализации.
- (void)textFieldDidBeginEditing:(UITextField *)textField{
[textField selectAll:textField];
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
return YES;
}
Передача в nil для selectAll: не отображает Меню.
Ответ 8
К сожалению, я не думаю, что вы можете это сделать.
Я не уверен, что это вам поможет, но setClearsOnBeginEditing
позволяет указать, что UITextField
должно удалить существующее значение, когда пользователь начнет редактирование (это значение по умолчанию для безопасного UITextFields
).
Ответ 9
Swift 3:
textField.selectAll(self)
Ответ 10
Я создаю собственное представление предупреждения, содержащее UITextField
внутри. Я обнаружил, что проблема с текстовым полем заключается в следующем: beginningOfDocument
имеет только значение, если текстовое поле добавлено на экран и вызывается becomeFirstResponder
.
В противном случае beginningOfDocument
возвращает nil
и [UITextField textRangeFromPosition:]
не может получить значение.
Итак, вот мой пример кода для решения этого случая.
UIWindow *window = [[[UIApplication sharedApplication] windows] firstObject];
[window addSubview:theAlertView]; // textfield must be added as a subview of screen first
UITextField *textField = theAlertView.textField;
[textField becomeFirstResponder]; // then call to show keyboard and cursor
UITextRange *range = [textField textRangeFromPosition:textField.beginningOfDocument toPosition:textField.endOfDocument]; // at this time, we could get beginningOfDocument
[textField setSelectedTextRange:range]; // Finally, it works!!!
Ответ 11
UITextField *tf = yourTF;
// hide cursor (you have store default color!!!)
[[tf valueForKey:@"textInputTraits"] setValue:[UIColor clearColor]
forKey:@"insertionPointColor"];
// enable selection
[tf selectAll:self];
// insert your string here
// and select nothing (!!!)
[tf setMarkedText:@"Egor"
selectedRange:NSMakeRange(0, 0)];
Готово!
Ответ 12
Если вы имеете в виду, как вы позволите пользователю редактировать текст в поле uitext, тогда просто назначьте ему firstResponder:
[textField becomeFirstResponder]
Если вы имеете в виду, как вы получаете текст в поле uitext, тогда это будет сделано:
textField.text
Если вы имеете в виду на самом деле выделите текст (как выделите его), это может быть полезно: