iOS系统菜单控制器UIMenuController使用简介(一)-阿里云开发者社区

开发者社区> 珲yy少> 正文

iOS系统菜单控制器UIMenuController使用简介(一)

简介: iOS系统菜单控制器UIMenuController使用简介
+关注继续查看


一、引言


  在许多iOS应用中,当用户进行某文字或图片区域的长按操作时,都会弹出一个系统菜单控件,用户可以通过操作菜单控件上的按钮进行数据的复制、剪切、粘贴等操作。系统原生的某些控件已经支持了对UIMenuController的唤出操作,然而并不是所有控件都支持,开发者可以通过自定义UIMenuController来更加灵活的使用菜单控件,在前面博客中有介绍iOS剪切板相关知识,地址如下:


iOS剪切板UIPasteboard使用简介:http://my.oschina.net/u/2340880/blog/653228


二、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;

}

效果如下图所示:

image.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS网络编程之三——NSURLConnection的简单使用
iOS网络编程之三——NSURLConnection的简单使用
32 0
iOS11问题: 定位服务在iOS11系统上不能使用?
iOS11问题: 定位服务在iOS11系统上不能使用? Q:我刚刚用iOS11 SDK重新构建了应用程序,发现定位服务现在根本不起作用。 原因:A:因为苹果现在增加了一项新的隐私保护功能 NSLocationAlwaysAndWhenInUseUsageDeion, 并且原有的 NSLocationAlwaysUsageDeion 被降级为 NSLocationWhenInUseUsageDeion。
971 0
基于西门子PLC200的无线通信控制系统
2002年开始开发焦炉四大机车自动化系统(见下图)的时候,遇到了无线通信的难题,众所周知目前的电台不能直接支持PPI协议,别的的无线通信的方案要么成本过高,要么性能不稳定,不可靠。
586 0
DNN URL Control的使用
DNN里文件上传一般使用的是一个URL控件,这个控件支持如下几个功能 输入一个外部URL 选择一个内部网页 选择一个内部文件链接,如果没有这个文件,可以上传文件 最终的结果就是返回一个URL给你。
539 0
iOS伪亮度调节/控制
iOS 5.0之前的版本并没有开放控制系统亮度的接口,所以app能做到的只是比系统设置的亮度更暗,具体做法就是在整个app的keywindow之上再放一个window,设置黑色背景,通过控制alpha值来达到明暗变化。
737 0
DevExpress - 使用 GaugeControl 标尺组件制作抽奖程序 附源码
  前不久,公司举办了15周年庆,其中添加了一个抽奖环节,要从在读学员中随机抽取幸运学员,当然,这个任务就分到了我这里。   最后的效果如下,启动有个欢迎页面,数据是来自Excel的,点击开始则上面的学号及姓名等信息开始随机滚动,显示区域自适应长度变化等。
936 0
[20170203]建立dataguard的standby控制文件
[20170203]建立dataguard的standby控制文件.txt --这个问题困扰我很久,链接:http://blog.itpub.net/267265/viewspace-1151324/ --就是使用rman的方式建立控制文件,会出现ora-01665错误.
784 0
+关注
594
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载