前言
相信大家都知道在iOS中有三個控件自身是支持拷貝,粘貼的,如:UITextField
,UITextView
,UIWebView
。但是,有時候我們會遇到需要長按UIlabel,彈出“復制”item,來實現可復制。那該怎麼辦呢?下面就來一起看看吧。
首先UIKit中提供給我們幾個類
在開始之前,我們需要自定義一個WINCopyLabel
繼承UILable
- (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { [self pressAction]; } return self; } // 初始化設置 - (void)pressAction { self.userInteractionEnabled = YES; UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)]; longPress.minimumPressDuration = 1; [self addGestureRecognizer:longPress]; }
1、UIResponder
:通過這個類實現UILabel可以響應事件(我們知道UIlabel是不能成為響應者的,所以這裡需要重寫),控制需要響應的事件
// 使label能夠成為響應事件 - (BOOL)canBecomeFirstResponder { return YES; } // 控制響應的方法 - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return action == @selector(customCopy:); }
2、UIPasteboard
:該類支持寫入和讀取數據,類似剪貼板
- (void)customCopy:(id)sender { UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; pasteboard.string = self.text; }
3、UIMenuController
:可以通過這個類實現在點擊內容,或者長按內容時展示出復制、剪貼、粘貼等選擇的項,每個選項都是一個UIMenuItem
對象
- (void)longPressAction:(UIGestureRecognizer *)recognizer { [self becomeFirstResponder]; UIMenuItem *copyItem = [[UIMenuItem alloc] initWithTitle:@"拷貝" action:@selector(customCopy:)]; [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects:copyItem, nil]]; [[UIMenuController sharedMenuController] setTargetRect:self.frame inView:self.superview]; [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES]; }
補充:
一、UIResponderStandardEditActions
:這是蘋果給NSObject寫的一個分類,其中包含了我們常用的復制,粘貼,全選等方法
- (void)cut:(nullable id)sender NS_AVAILABLE_IOS(3_0); - (void)copy:(nullable id)sender NS_AVAILABLE_IOS(3_0); - (void)paste:(nullable id)sender NS_AVAILABLE_IOS(3_0); - (void)select:(nullable id)sender NS_AVAILABLE_IOS(3_0); - (void)selectAll:(nullable id)sender NS_AVAILABLE_IOS(3_0); - (void)delete:(nullable id)sender NS_AVAILABLE_IOS(3_2);
當我們,選中彈出的item時,系統會調用上面對應的方法
二、.以下是剪貼板中可以放置的內容(除了字符串,也可以拷貝圖片,URL等)
1.UIPasteboardTypeListString
字符串數組, 包含kUTTypeUTF8PlainText
2.UIPasteboardTypeListURL
URL數組,包含kUTTypeURL
3.UIPasteboardTypeListImage
圖形數組, 包含kUTTypePNG 和kUTTypeJPEG
4.UIPasteboardTypeListColor
顏色數組
總結
以上就是這篇文章的全部內容了,希望能對各位iOS開發者們有所幫助,如果有疑問大家可以留言交流。