亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS中長按調出菜單組件UIMenuController的使用實例

2020-07-26 03:19:27
字體:
來源:轉載
供稿:網友

UIMenuController的使用

   UIMenuController的展現需要基于一個View視圖,其交互則需要基于其所在View視圖的Responder。舉例來說,如果一個UIMenuController展現在當前ViewController的View上,則此UIMenuController的交互邏輯交由當前的ViewController進行管理。

    在界面展示出UIMenuController需要3個條件:

    1.當前的Responder處于第一響應。

    2.UIMenuController對象調用menuVisible方法。

    3.當前的Responder實現了如下兩個方法:

//是否可以成為第一相應-(BOOL)canBecomeFirstResponder{  return YES;}//是否可以接收某些菜單的某些交互操作-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{    return YES;}

實現了上面的兩個方法,使用如下的代碼可以喚出UIMenuController控件:

  [self becomeFirstResponder];  //設置菜單顯示的位置 frame設置其文職 inView設置其所在的視圖  [[UIMenuController sharedMenuController] setTargetRect:frame inView:self.view];  //將菜單控件設置為可見  [UIMenuController sharedMenuController].menuVisible = YES;

在執行了上面的代碼后,系統第一次調用canperformAction:withSender:方法會進行是否顯示菜單欄的檢測,如果返回為NO,則不能顯示菜單欄,如果返回為YES,之后系統會多次調用canPerformAction:withSender:方法,用于檢測當前Responder對象是否實現了菜單欄上某個選項的觸發方法,如果實現了,菜單欄上面的相應按鈕會顯示,否則不會顯示。開發者可以在這個方法中通過判斷action來確定菜單控件中顯示的按鈕種類。系統默認為開發者提供了一系列的菜單按鈕,例如要顯示剪切和賦值操作的菜單按鈕,示例代碼如下:

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{  if (action == @selector(cut:)||action == @selector(copy:)) {    return YES;  }  return NO;}

效果如下圖所示:

201662192149510.png (280×523)

系統默認支持提供的按鈕觸發方法列舉如下:

//剪切按鈕的方法- (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);//改變書寫模式為從左向右按鈕觸發的方法- (void)makeTextWritingDirectionLeftToRight:(nullable id)sender NS_AVAILABLE_IOS(5_0);//改變書寫模式為從右向左按鈕觸發的方法- (void)makeTextWritingDirectionRightToLeft:(nullable id)sender NS_AVAILABLE_IOS(5_0);

上面所列舉的方法聲明在UIResponder頭文件中,實際上,除了上面的方法,關于UIMenuController上面的按鈕,系統中還有許多私有方法,列舉如下:

//替換按鈕- (void)_promptForReplace:(id)arg1{  NSLog(@"promptForReplace");}//簡體繁體轉換按鈕-(void)_transliterateChinese:(id)sender{  NSLog(@"transliterateChinese");}//文字風格按鈕-(void)_showTextStyleOptions:(id)sender{  NSLog(@"showTextStyleOptions");}//定義按鈕-(void)_define:(id)sender{  NSLog(@"define");}-(void)_addShortcut:(id)sender{  NSLog(@"addShortcut");}-(void)_accessibilitySpeak:(id)sender{  NSLog(@"accessibilitySpeak");}//語言選擇按鈕-(void)_accessibilitySpeakLanguageSelection:(id)sender{  NSLog(@"accessibilitySpeakLanguageSelection");}//暫停發音按鈕-(void)_accessibilityPauseSpeaking:(id)sender{  NSLog(@"accessibilityPauseSpeaking");}//分享按鈕-(void)_share:(id)sender{  NSLog(@"share");}

實例進階  

在實際開發中,開發這完全不需要使用這些私有的方法,UIMenuItem類提供給開發者進行自定義菜單按鈕與觸發方法,示例如下:

[self becomeFirstResponder];  UIMenuItem * item = [[UIMenuItem alloc]initWithTitle:@"自定義" action:@selector(newFunc)];  [[UIMenuController sharedMenuController] setTargetRect:[sender frame] inView:self.view];  [UIMenuController sharedMenuController].menuItems = @[item];  [UIMenuController sharedMenuController].menuVisible = YES;-(BOOL)canBecomeFirstResponder{  return YES;}-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{  if (action == @selector(newFunc)) {    return YES;  }  return NO;}-(void)newFunc{  NSLog(@"自定義方法");}

效果如下圖所示:

201662192303352.png (315×586)

UIMenuController還有如下的屬性用來設置其顯示的位置:

//顯示的位置@property(nonatomic) UIMenuControllerArrowDirection arrowDirection;//枚舉如下:/*typedef NS_ENUM(NSInteger, UIMenuControllerArrowDirection) {  //默認 基于當前屏幕狀態  UIMenuControllerArrowDefault, // up or down based on screen location  //箭頭在上的顯示模式  UIMenuControllerArrowUp NS_ENUM_AVAILABLE_IOS(3_2),  //箭頭在下的顯示模式  UIMenuControllerArrowDown NS_ENUM_AVAILABLE_IOS(3_2),  //箭頭在左的顯示模式  UIMenuControllerArrowLeft NS_ENUM_AVAILABLE_IOS(3_2),  //箭頭在右的顯示模式  UIMenuControllerArrowRight NS_ENUM_AVAILABLE_IOS(3_2),};*/


注意點總結
要正常顯示菜單,必須做到以下幾點:
1. -(BOOL)canBecomeFirstResponder 必須返回YES

2. -(BOOL)canPerformAction:(SEL)action withSender:(id)sender
該函數中,要顯示的菜單項(包括系統的菜單項)的方法必須返回YES

3. 在顯示菜單前,必須調用:

[self becomeFirstResponder] 

成為第一個響應者

4. 為了馬上可以正常顯示第二個菜單,必須使用:

  [menuController setMenuVisible:NO];

先關閉一下,不然就顯示不出來!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人女保姆的销魂服务| 欧美日韩午夜激情| 韩日精品中文字幕| 欧美成人免费在线观看| 久久99久国产精品黄毛片入口| 欧美激情精品久久久久久久变态| 亚洲精品资源美女情侣酒店| 欧美午夜精品久久久久久久| 亚洲第一在线视频| 亚洲www视频| 亚洲加勒比久久88色综合| 日本在线观看天堂男亚洲| 欧美日韩国产色视频| 日韩av电影在线播放| 亚洲激情视频在线| 成人国产精品一区二区| 国产精品视频精品视频| 成人久久久久爱| 欧美日韩国产中文字幕| 456亚洲影院| 亚洲精品久久久久久久久久久久久| 深夜福利一区二区| 伊人男人综合视频网| 亚洲成人激情视频| 国产精品一区二区久久久| 欧美久久精品午夜青青大伊人| 在线视频免费一区二区| 亚洲欧美国产日韩天堂区| 欧美专区在线视频| 久久在线视频在线| 中文字幕日韩高清| 国产成人精品国内自产拍免费看| 中文字幕精品在线| 亚洲一区二区久久久久久| 亚洲欧美激情视频| 欧美精品videofree1080p| 国产一区视频在线| 国产suv精品一区二区| 亚洲视频在线观看视频| 久久精品国产亚洲精品| 国产丝袜一区二区三区| 久久久在线视频| 一本色道久久综合狠狠躁篇的优点| 欧美理论在线观看| 日韩av电影手机在线| 亚洲欧美日韩精品久久奇米色影视| 理论片在线不卡免费观看| 97**国产露脸精品国产| 97在线看福利| 欧美日本在线视频中文字字幕| 国产精品99久久99久久久二8| 亚洲毛片在线观看.| 国产亚洲日本欧美韩国| 日本免费在线精品| 亚洲一区二区中文字幕| 欧美福利视频网站| 欧美国产一区二区三区| 亚洲黄色www| 欧美激情日韩图片| 在线国产精品播放| 亚洲欧美成人在线| www.久久久久久.com| 久久久久国色av免费观看性色| 亚洲一区二区三区xxx视频| 国产精品678| 久久香蕉国产线看观看网| 国产+成+人+亚洲欧洲| 国语对白做受69| 中文字幕日韩精品在线观看| xvideos国产精品| 亚洲一区二区在线播放| 欧美成人精品xxx| 欧美中文在线观看| 亚洲丁香婷深爱综合| 91香蕉嫩草神马影院在线观看| 国产精品久久久久久五月尺| 欧美日韩国产综合视频在线观看中文| 欧美日韩精品在线视频| 中日韩美女免费视频网站在线观看| 亚洲国产欧美一区二区三区同亚洲| 色妞久久福利网| 亚洲一区二区三区视频| 国产欧美日韩视频| 亚洲一区二区三区四区在线播放| 欧美午夜激情小视频| 成人性生交xxxxx网站| 草民午夜欧美限制a级福利片| 欧美精品videos| 91精品国产91久久久久久久久| 国内精品免费午夜毛片| 久久亚洲综合国产精品99麻豆精品福利| 精品国产依人香蕉在线精品| 2019中文字幕在线| 日韩av在线资源| 欧美成人在线免费| 亚洲欧美中文字幕在线一区| 国产婷婷色综合av蜜臀av| www.亚洲天堂| 成人免费黄色网| 色狠狠av一区二区三区香蕉蜜桃| 国产精品网站大全| 欧美成人精品一区二区| 国产精品视频内| 国产一区二区精品丝袜| 色综合天天综合网国产成人网| 久久久电影免费观看完整版| 91超碰caoporn97人人| 欧美视频一区二区三区…| 一本色道久久综合狠狠躁篇的优点| 亚洲丁香婷深爱综合| 亚洲精品网站在线播放gif| 久久久久久久一区二区三区| 欧美精品999| 日本久久久久久久久| 国产午夜一区二区| 国产亚洲精品综合一区91| 久久久视频精品| 欧美电影免费在线观看| 日韩在线视频免费观看高清中文| 精品亚洲aⅴ在线观看| 一区二区三区www| 91系列在线播放| 伊人久久久久久久久久| 这里只有精品视频在线| 国产精品三级美女白浆呻吟| 日本免费久久高清视频| 国产欧美一区二区| 日韩成人中文字幕| 91九色综合久久| 一区二区av在线| 国产精品成人av性教育| 久久精品国产2020观看福利| 国产91在线播放精品91| 欧美一区二区三区图| 久久久97精品| 国产精品一区av| 亚洲人成伊人成综合网久久久| 欧美日韩国产精品| 欧美性猛交xxxx久久久| 日本成人在线视频网址| 日韩av在线影院| 国产中文欧美精品| 欧美电影免费播放| 欧美激情区在线播放| 国产视频精品xxxx| 国产精品老女人精品视频| 亚洲国产一区二区三区在线观看| 日韩亚洲欧美中文高清在线| 久久综合电影一区| 国模私拍视频一区| 91社影院在线观看| 国内精品视频在线| 欧美激情综合亚洲一二区| 精品久久久久久久久久久久久| 欧美福利视频网站| 亚洲欧美激情视频| 国产精品第1页| 亚洲国产99精品国自产| 在线免费看av不卡| 亚洲香蕉av在线一区二区三区| 91人人爽人人爽人人精88v| 91免费精品国偷自产在线| 久久中文字幕一区| 亚洲日韩中文字幕在线播放|