web-dev-qa-db-fra.com

Autoriser l'utilisateur à sélectionner le texte de UILabel à copier

J'ai un UILabel, mais comment puis-je permettre à l'utilisateur de sélectionner une partie de son texte. Je ne veux pas que l'utilisateur puisse modifier le texte ni que l'étiquette/champ de texte ait une bordure.

53
Jonathan.

Ce n'est pas possible avec UILabel.

Vous devez utiliser UITextField pour cela. Désactivez simplement la modification à l'aide de la méthode déléguée textFieldShouldBeginEditing.

57
Yuras

Vous utilisez créer un UITextView et faire son .editable à NON. Ensuite, vous avez une vue texte que (1) l'utilisateur ne peut pas modifier (2) n'a pas de bordure et (3) l'utilisateur peut sélectionner du texte dans celui-ci.

30
kennytm

La version d'un pauvre homme de copier-coller, si vous ne pouvez pas, ou n'avez pas besoin d'utiliser une vue texte, serait d'ajouter un identificateur de gestes à l'étiquette, puis de copier tout le texte dans le presse-papiers. Il n'est pas possible de faire juste une partie à moins d'utiliser un UITextView

Assurez-vous de faire savoir à l'utilisateur qu'il a été copié et de prendre en charge à la fois un geste de simple pression et un appui long, car il détectera les utilisateurs essayant de mettre en surbrillance une partie du texte. Voici un exemple de code pour vous aider à démarrer:

Enregistrez les reconnaisseurs de gestes sur votre étiquette lorsque vous la créez:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textTapped:)];
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(textPressed:)];
                [myLabel addGestureRecognizer:tap];
                [myLabel addGestureRecognizer:longPress];
                [myLabel setUserInteractionEnabled:YES];

Ensuite, gérez les gestes:

- (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
            ...
    }
}
24
Michael Gaylord