UILabel實現(xiàn)復制

UIKit框架里的能夠支持復制的,很自然就會想到UITextView、UITextField、UIWebView。但是有一次我在做項目的時候,碰到了這樣一個問題,之前用作展示的訂單流水號(很長很長的那種),忽然有一天想copy給服務端進行對賬查詢。為了支持復制,把原本寫好的Label換成UITextField,改動會比較大。所以我就研究了如何讓UILabel支持復制。

一. 自定義LYCopyLabel,繼承自UILabel

//
//  LYCopyLabel.h
//  11-長按復制
//
//  Created by yzfx-sh-liuyan on 2017/2/16.
//  Copyright ? 2017年 chris. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface LYCopyLabel : UILabel

@end

二. 具體實現(xiàn)步驟

  • 1、 添加手勢事件,設置手勢響應時間
- (instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        [self pressAction];
    }
    return self;
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder{
    
    if (self = [super initWithCoder:aDecoder]) {
        [self pressAction];
    }
    return self;
}

- (void)pressAction{
    self.userInteractionEnabled = YES;
    UILongPressGestureRecognizer *gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)];
    gesture.minimumPressDuration = 1;
    [self addGestureRecognizer:gesture];
}

  • 2、實現(xiàn)手勢處理事件
- (void)longPressAction:(UIGestureRecognizer *)recognizer{
    [self becomeFirstResponder];
    UIMenuItem *copyItem = [[UIMenuItem alloc] initWithTitle:@"拷貝" action:@selector(customCopy:)];
    //UIMenuController:可以通過這個類實現(xiàn)在點擊內容,每個選項都是一個UIMenuItem對象
    [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects:copyItem, nil]];
    [[UIMenuController sharedMenuController] setTargetRect:self.frame inView:self.superview];
    [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES];
}

- (void)customCopy:(id)sender {
    //UIPasteboard 該類支持寫入和讀取數(shù)據(jù),類似剪貼板,除了字符串,也可以拷貝圖片,URL
    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    pasteboard.string = self.text;
}

寫完上面的,點擊運行后,長按Lebel并不會像UITextfield一樣彈出拷貝字樣,相反他什么動作也沒有?。。?/p>

  • 3、 重寫父類方法,使UILabel成為響應者
#pragma mark - 重寫UIResponder

 //讓label能夠成為響應事件
- (BOOL)canBecomeFirstResponder{
    return YES;
}


**需要說明的是:**
    在當上第一響應對象時,不同對象可能會有一些特殊的表現(xiàn)。例如UITextField當上的時
    候,就會調出一塊小鍵盤。

  • 4、 控制哪些事件可以響應
//控制響應的事件
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
    return action == @selector(customCopy:);
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容