2010-11-03 4 views
40

Ich habe ein UILabel, aber wie kann ich dem Benutzer erlauben, einen Teil seines Textes auszuwählen. Ich möchte nicht, dass der Benutzer den Text oder das Label/Textfeld bearbeiten kann, um einen Rahmen zu erhalten.Erlaube dem Benutzer, Text von UILabel zu kopieren

+0

Verwendung https: //github.com/hoteltonight/HTCopyableLabel –

Antwort

47

Es ist nicht möglich mit UILabel.

Sie sollten UITextField dafür verwenden. Deaktivieren Sie einfach die Bearbeitung mit der Delegate-Methode textFieldShouldBeginEditing.

+0

Aber das wird die 3D-Grenze haben, nicht wahr? –

+1

Ich benutze UITextField vor ein paar Wochen und ich erinnere mich, dass es keine Grenze gab (es wurde in xib erstellt). Wenn Ihr UITextField einen Rahmen hat, dann lesen Sie einfach die Dokumentation, um herauszufinden, wie Sie den Rahmen deaktivieren können. – Yuras

+3

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

21

Sie verwenden ein UITextView erstellen und .editable auf NO. Dann haben Sie eine Textansicht, die (1) der Benutzer nicht bearbeiten kann (2) keinen Rahmen hat und (3) der Benutzer kann Text von ihm auswählen.

19

Eine schlechte Version von Copy and Paste, wenn Sie eine Textansicht nicht verwenden können oder müssen, wäre das Hinzufügen einer Gestenerkennung zum Label und dann einfach den gesamten Text in die Zwischenablage kopieren. Es ist nicht möglich, nur einen Teil zu tun, es sei denn, Sie verwenden eine UITextView

Stellen Sie sicher, dass Sie den Benutzer wissen, dass es kopiert wurde und dass Sie sowohl eine einzelne Tippgeste als auch ein langes Drücken unterstützen, da es die Benutzer abholen wird um einen Teil des Textes hervorzuheben. Hier ist ein bisschen von Beispielcode zum Einstieg:

Registrieren Sie die Geste Erkenner auf dem Etikett, wenn Sie es schaffen:

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]; 

nächstes die Gesten umgehen:

- (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

nette Antwort, aber Sie sollten eine Zeile Code hinzufügen: myLabel.userInteractionEnabled = YES; – Ilario

Verwandte Themen