国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

iOS中UILabel實現(xiàn)長按復(fù)制功能實例代碼

2019-10-21 18:44:01
字體:
供稿:網(wǎng)友

前言

網(wǎng)上有很多種給Label添加長按復(fù)制功能的方法,而在 UILabel 上實現(xiàn)長按復(fù)制,我用的是 UIMenuController。在 UITextView、UITextField 中,已經(jīng)自帶了這個東西,但是在 UILabel 上需要自定義。

鑒于有的朋友很少接觸 UIMenuController,這里先介紹一些基本知識。

UIMenuController 可以使用系統(tǒng)自帶的方法,也可以自定義。

系統(tǒng)默認支持UITextField、UITextView、UIWebView控件的UIMenuController相關(guān)操作

常見的系統(tǒng)方法和使用

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

從字面意思就能看出,他們是剪切、復(fù)制、粘貼、選擇、全選、刪除。使用方法很簡單。

// 比如我在一個 UITextView 里,想增加全選和復(fù)制的方法// 只要在自定義 UITextView 的時候加入這行代碼即可- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { if(action == @selector(selectAll:) || action == @selector(copy:)) return YES; return NO;}

細心的朋友可能會發(fā)現(xiàn),最后長按出來的文字都是英文,我們改如何把他改成中文呢?如圖,在 Project -> Info -> Localizations 中添加 Chinese(Simplified) 即可。

ios,uilabel,長按復(fù)制

自定義方法和使用

回到主題,我們要在 UILabel 上加入長按復(fù)制事件,但是他本身是不支持 UIMenuController 的,所以接下來講講自定義方法。

自定義一個 UILabel,設(shè)置label可以成為第一響應(yīng)者

- (BOOL)canBecomeFirstResponder { return YES;}

設(shè)置長按事件,在初始化的時候調(diào)用這個方法

- (void)setUp { /* 你可以在這里添加一些代碼,比如字體、居中、夜間模式等 */ self.userInteractionEnabled = YES; [self addGestureRecognizer:[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress)]];}

長按事件,在里面新建 UIMenuController

- (void)longPress {  // 設(shè)置label為第一響應(yīng)者 [self becomeFirstResponder];  // 自定義 UIMenuController UIMenuController * menu = [UIMenuController sharedMenuController]; UIMenuItem * item1 = [[UIMenuItem alloc]initWithTitle:@"復(fù)制" action:@selector(copyText:)]; menu.menuItems = @[item1]; [menu setTargetRect:self.bounds inView:self]; [menu setMenuVisible:YES animated:YES];}

設(shè)置label能夠執(zhí)行那些

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { if(action == @selector(copyText:)) return YES; return NO;}// 如果模仿上面的寫以下代碼,點擊后會導(dǎo)致程序崩潰if(action == @selector(selectAll:) || action == @selector(copy:)) return YES; 

方法的具體實現(xiàn)

- (void)copyText:(UIMenuController *)menu { // 沒有文字時結(jié)束方法 if (!self.text) return; // 復(fù)制文字到剪切板 UIPasteboard * paste = [UIPasteboard generalPasteboard]; paste.string = self.text; }

最終效果:

ios,uilabel,長按復(fù)制

附上 DEMO (本地下載),自定義的 UILabel 可以直接拖走使用

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到IOS開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 浦北县| 连州市| 潮州市| 广元市| 阳信县| 正蓝旗| 如东县| 琼海市| 西安市| 兴文县| 策勒县| 南川市| 大名县| 巫溪县| 绥宁县| 荣成市| 旺苍县| 辽阳市| 永胜县| 罗江县| 祥云县| 金秀| 合肥市| 共和县| 广南县| 双牌县| 宿迁市| 达尔| 东乡族自治县| 兴山县| 博爱县| 师宗县| 孝义市| 澄城县| 嵩明县| 德江县| 都昌县| 建水县| 泰和县| 黑水县| 东城区|