允许用户从UILabel中选择要复制的文本

Jon*_*an. 55 iphone objective-c uilabel

我有一个UILabel,但是如何让用户选择它的一部分文本.我不希望用户能够编辑文本,也不希望标签/文本字段具有边框.

Yur*_*ras 58

这是不可能的UILabel.

你应该用UITextField它.只需使用textFieldShouldBeginEditing委托方法禁用编辑.

  • 你的意思是UITextView不是UITextField,对吗?UITextField上没有`editable`属性. (26认同)
  • http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextField_Class/Reference/UITextField.html [textField setBorderStyle:UITextBorderStyleNone] (3认同)
  • 这是一个类别:https://github.com/alexandreos/UILabel-Copyable (3认同)
  • 实际上,任何`UIResponder`子类都可以. (3认同)

ken*_*ytm 30

您使用创建UITextView并使其.editable为NO.然后你有一个文本视图,其中(1)用户无法编辑(2)没有边框,(3)用户可以从中选择文本.


Mic*_*ord 24

一个穷人的复制和粘贴版本,如果你不能,或者不需要使用文本视图,那就是在标签上添加一个手势识别器,然后将整个文本复制到粘贴板.除非你使用一个部分,否则不可能只做一部分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];
                [myLabel setUserInteractionEnabled:YES];
Run Code Online (Sandbox Code Playgroud)

接下来处理手势:

- (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
            ...
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但你应该添加一行代码:myLabel.userInteractionEnabled = YES; (3认同)