Подтвердить что ты не робот

Разрешить пользователю выбирать текст из UILabel для копирования

У меня есть UILabel, но как я могу позволить пользователю выбрать часть текста. Я не хочу, чтобы пользователь мог редактировать текст, а также ярлык/текстовое поле, чтобы иметь границу.

4b9b3361

Ответ 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
            ...
    }
}