你見過卻不知道的UIMenuController
前言:最近一段時間都在做項目,寫博客很少,這幾天會把項目中遇到的一些小知識點總結分享給大家.
先看一下圖,蘋果自帶的UIMenuController都在什么地方
UITextFiled
UITextFiled.png
UITextView
UITextView.png
UIWebView
UIWebView.png
由以上3張圖可以看出UITextFiled,UITextView,UIWebView,在這幾個控件上點擊時都能夠彈出UIMenuController,以便我們實現拷貝,粘貼等功能, 但我們在實際開發(fā)過程中有可能有這樣的需求,如下圖
cell.png
大家都知道, cell不具備以上功能的,需要我們自己實現這種需求,下面為了方便演示,我對前三張圖片中的UILable實現上述功能.
要讓UILable實現上述功能我們需要對UILable進行重寫,代碼如下;
#import"ZHLable.h"@implementationZHLable- (void)awakeFromNib{// 給lable添加手勢[selfaddGestureRecognizer:[[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(labelClick)]];}/**
*? label可以成為第一響應者
*/- (BOOL)canBecomeFirstResponder{returnYES;}/**
*? 監(jiān)聽label點擊
*/- (void)labelClick{// 成為第一響應者[selfbecomeFirstResponder];// 彈出MenuControllerUIMenuController*menu = [UIMenuControllersharedMenuController];// 設置顯示的范圍//? ? [menu setTargetRect:self.bounds inView:self];[menu setTargetRect:self.frameinView:self.superview];? ? [menu setMenuVisible:YESanimated:YES];}/**
*? 這個方法決定了MenuController的菜單項內容
*? 返回YES,就代表MenuController會有action菜單項
*/- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{if(action ==@selector(cut:)? ? ? ? || action ==@selector(copy:)? ? ? ? || action ==@selector(paste:))returnYES;returnNO;}#pragma mark - 菜單點擊處理- (void)cut:(UIMenuController*)menu{// 將當前l(fā)abel的文字設置到粘貼板[UIPasteboardgeneralPasteboard].string=self.text;// 清空文字self.text=nil;}- (void)copy:(UIMenuController*)menu{// 將當前l(fā)abel的文字設置到粘貼板[UIPasteboardgeneralPasteboard].string=self.text;}- (void)paste:(UIMenuController*)menu{// 將粘貼板的文字設置到當前l(fā)abel上self.text= [UIPasteboardgeneralPasteboard].string;}@end
OK,這樣我們實現了上述功能, 如下圖:
lable.png
上述實現過程也不是很難,關鍵是大家需要知道有這個功能,當項目有這樣的需求知道怎么做就行
注: 上面整個示例過程可能對于初學者可能還存在以下問題
(一)語言問題:
語言問題.png
解決方法:
語言解決.png
(二)UILable默認不能與用戶交互
@property(nonatomic,getter=isUserInteractionEnabled)BOOLuserInteractionEnabled;// default is NO
解決方法:
1??
lable.userInteractionEnabled = YES;
2??
交互.png