iOS長(zhǎng)按UIlabel實(shí)現(xiàn)可復(fù)制功能
前言
相信大家都知道在iOS中有三個(gè)控件自身是支持拷貝,粘貼的,如:UITextField
,UITextView
,UIWebView
。但是,有時(shí)候我們會(huì)遇到需要長(zhǎng)按UIlabel,彈出“復(fù)制”item,來(lái)實(shí)現(xiàn)可復(fù)制。那該怎么辦呢?下面就來(lái)一起看看吧。
首先UIKit中提供給我們幾個(gè)類
在開(kāi)始之前,我們需要自定義一個(gè)WINCopyLabel
繼承UILable
- (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { [self pressAction]; } return self; } // 初始化設(shè)置 - (void)pressAction { self.userInteractionEnabled = YES; UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)]; longPress.minimumPressDuration = 1; [self addGestureRecognizer:longPress]; }
1、UIResponder
:通過(guò)這個(gè)類實(shí)現(xiàn)UILabel可以響應(yīng)事件(我們知道UIlabel是不能成為響應(yīng)者的,所以這里需要重寫(xiě)),控制需要響應(yīng)的事件
// 使label能夠成為響應(yīng)事件 - (BOOL)canBecomeFirstResponder { return YES; } // 控制響應(yīng)的方法 - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return action == @selector(customCopy:); }
2、UIPasteboard
:該類支持寫(xiě)入和讀取數(shù)據(jù),類似剪貼板
- (void)customCopy:(id)sender { UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; pasteboard.string = self.text; }
3、UIMenuController
:可以通過(guò)這個(gè)類實(shí)現(xiàn)在點(diǎn)擊內(nèi)容,或者長(zhǎng)按內(nèi)容時(shí)展示出復(fù)制、剪貼、粘貼等選擇的項(xiàng),每個(gè)選項(xiàng)都是一個(gè)UIMenuItem
對(duì)象
- (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]; }
補(bǔ)充:
一、UIResponderStandardEditActions
:這是蘋(píng)果給NSObject寫(xiě)的一個(gè)分類,其中包含了我們常用的復(fù)制,粘貼,全選等方法
- (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);
當(dāng)我們,選中彈出的item時(shí),系統(tǒng)會(huì)調(diào)用上面對(duì)應(yīng)的方法
二、.以下是剪貼板中可以放置的內(nèi)容(除了字符串,也可以拷貝圖片,URL等)
1.UIPasteboardTypeListString
字符串?dāng)?shù)組, 包含kUTTypeUTF8PlainText
2.UIPasteboardTypeListURL
URL數(shù)組,包含kUTTypeURL
3.UIPasteboardTypeListImage
圖形數(shù)組, 包含kUTTypePNG 和kUTTypeJPEG
4.UIPasteboardTypeListColor
顏色數(shù)組
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望能對(duì)各位iOS開(kāi)發(fā)者們有所幫助,如果有疑問(wèn)大家可以留言交流。
- iOS開(kāi)發(fā)中使用UILabel設(shè)置字體的相關(guān)技巧小結(jié)
- iOS中UILabel設(shè)置居上對(duì)齊、居中對(duì)齊、居下對(duì)齊及文字置頂顯示
- iOS應(yīng)用中UILabel文字顯示效果的常用設(shè)置總結(jié)
- iOS App開(kāi)發(fā)中修改UILabel默認(rèn)字體的方法
- iOS 設(shè)置UILabel的行間距并自適應(yīng)高度的方法
- iOS UILabel 設(shè)置內(nèi)容的間距及高度的計(jì)算示例
- iOS開(kāi)發(fā)筆記--詳解UILabel的相關(guān)屬性設(shè)置
- UILabel顯示定時(shí)器文本跳動(dòng)問(wèn)題的解決方法
相關(guān)文章
關(guān)于iOS 11下app圖標(biāo)變空白問(wèn)題的解決方法
升級(jí)到iOS11系統(tǒng)下自己的項(xiàng)目桌面app圖標(biāo)不見(jiàn)了,通過(guò)查找相關(guān)的資料終于找到了解決方法,下面這篇文章主要給大家介紹了關(guān)于iOS 11下app圖標(biāo)變空白問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-12-12iOS開(kāi)發(fā)之UIKeyboardTypeNumberPad數(shù)字鍵盤(pán)自定義按鍵
這篇文章主要介紹了iOS開(kāi)發(fā)之UIKeyboardTypeNumberPad數(shù)字鍵盤(pán)自定義按鍵 的相關(guān)資料,需要的朋友可以參考下2016-08-08IOS開(kāi)發(fā)壓縮后圖片模糊問(wèn)題解決
這篇文章主要為大家介紹了IOS開(kāi)發(fā)壓縮后圖片模糊問(wèn)題解決實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07iOS開(kāi)發(fā)之級(jí)聯(lián)界面(推薦界面)搭建原理
這篇文章主要為大家詳細(xì)介紹了iOS級(jí)聯(lián)界面(推薦界面)搭建原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08淺談Xcode 開(kāi)發(fā)工具 XCActionBar
本文主要給大家簡(jiǎn)單講解了Xcode的開(kāi)發(fā)工具 XCActionBar的介紹與使用方法,非常的全面實(shí)用,有需要的小伙伴可以參考下。2015-11-11IOS點(diǎn)擊按鈕隱藏狀態(tài)欄詳解及實(shí)例代碼
這篇文章主要介紹了IOS點(diǎn)擊按鈕隱藏狀態(tài)欄詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02