У меня есть UILabel, но как я могу позволить пользователю выбрать часть текста. Я не хочу, чтобы пользователь мог редактировать текст, а также ярлык/текстовое поле, чтобы иметь границу.
Разрешить пользователю выбирать текст из UILabel для копирования
Ответ 1
Это невозможно при UILabel
.
Для этого вам следует использовать UITextField
. Просто отключите редактирование с помощью метода делегирования textFieldShouldBeginEditing
.
Ответ 2
Вы используете создать UITextView и сделать его .editable
равным NO. Затем у вас есть текстовое представление, которое (1) пользователь не может редактировать (2) не имеет границы, и (3) пользователь может выбрать текст из него.
Ответ 3
Скопировать и вставить неудачную версию, если вы не можете или не хотите использовать текстовое представление, было бы добавить распознаватель жестов к метке, а затем просто скопировать весь текст в картотеку. Невозможно сделать только часть, если вы не используете UITextView
Удостоверьтесь, что вы позволили пользователю узнать, что он был скопирован, и что вы поддерживаете как жест одного нажатия, так и длительное нажатие, так как оно поднимет пользователей, пытаясь выделить часть текста. Вот несколько примеров кода для запуска:
Зарегистрируйте распознаватели жестов на своем ярлыке при его создании:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textTapped:)];
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(textPressed:)];
[myLabel addGestureRecognizer:tap];
[myLabel addGestureRecognizer:longPress];
Далее обработайте жесты:
- (void) textPressed:(UILongPressGestureRecognizer *) gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateRecognized &&
[gestureRecognizer.view isKindOfClass:[UILabel class]]) {
UILabel *someLabel = (UILabel *)gestureRecognizer.view;
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
[pasteboard setString:someLabel.text];
...
//let the user know you copied the text to the pasteboard and they can no paste it somewhere else
...
}
}
- (void) textTapped:(UITapGestureRecognizer *) gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateRecognized &&
[gestureRecognizer.view isKindOfClass:[UILabel class]]) {
UILabel *someLabel = (UILabel *)gestureRecognizer.view;
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
[pasteboard setString:someLabel.text];
...
//let the user know you copied the text to the pasteboard and they can no paste it somewhere else
...
}
}