2010-11-03 4 views

Répondre

47

Ce n'est pas possible avec UILabel. Vous devez utiliser UITextField pour cela. Désactivez simplement l'édition à l'aide de la méthode de délégation textFieldShouldBeginEditing.

+0

Mais cela aura la bordure 3D n'est-ce pas? –

+1

J'ai utilisé UITextField il y a quelques semaines et je me souviens qu'il n'y avait pas de bordure (elle a été créée en xib). Si votre UITextField a une bordure, il suffit de lire la documentation pour savoir comment désactiver la bordure. – Yuras

+3

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextField_Class/Reference/UITextField.html [textField setBorderStyle: UITextBorderStyleNone] – Yuras

21

Vous utilisez créer un UITextView et rendre son .editable à NO. Ensuite, vous avez une vue de texte qui (1) l'utilisateur ne peut pas éditer (2) n'a pas de bordure et (3) l'utilisateur peut sélectionner du texte à partir de lui.

19

Une version pauvre de copier-coller, si vous ne pouvez pas, ou n'avez pas besoin d'utiliser une vue de texte, serait d'ajouter un reconnaisseur de gestes à l'étiquette, puis copiez tout le texte dans le carton. Assurez-vous de faire savoir à l'utilisateur qu'il a été copié et que vous soutenez à la fois un simple geste du robinet et une pression longue, car il va chercher les utilisateurs qui essaient pour mettre en évidence une partie du texte. Voici un peu de code exemple pour vous aider à démarrer:

Inscrivez-vous le geste de reconnaissance sur votre étiquette lors de sa création:

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érer 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 
      ... 
    } 
} 
+2

bonne réponse, mais vous devez ajouter une ligne de code: myLabel.userInteractionEnabled = YES; – Ilario

Questions connexes