2019独角兽企业重金招聘Python工程师标准>>>

UIMenuController的使用,对UILabel拷贝以及定制菜单


1. Menu所处的View必须实现 – (BOOL)canBecomeFirstResponder, 且返回YES

2. Menu所处的View必须实现 – (BOOL)canPerformAction:withSender, 并根据需求返回YES或NO

3. 使Menu所处的View成为First Responder (becomeFirstResponder)

4. 定位Menu (- setTargetRect:inView:)

5. 展示Menu (- setMenuVisible:animated:)

  1. @implementation UICopyLabel
  2. // default is NO
  3. - (BOOL)canBecomeFirstResponder{
  4. return YES;
  5. }
  6. //"反馈"关心的功能
  7. -(BOOL)canPerformAction:(SEL)action withSender:(id)sender{
  8. return (action == @selector(copy:));
  9. }
  10. //针对于copy的实现
  11. -(void)copy:(id)sender{
  12. UIPasteboard *pboard = [UIPasteboard generalPasteboard];
  13. pboard.string = self.text;
  14. }
  15. //UILabel默认是不接收事件的,我们需要自己添加touch事件
  16. -(void)attachTapHandler{
  17. self.userInteractionEnabled = YES;  //用户交互的总开关
  18. UITapGestureRecognizer *touch = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
  19. touch.numberOfTapsRequired = 2;
  20. [self addGestureRecognizer:touch];
  21. [touch release];
  22. }
  23. //绑定事件
  24. - (id)initWithFrame:(CGRect)frame
  25. {
  26. self = [super initWithFrame:frame];
  27. if (self) {
  28. [self attachTapHandler];
  29. }
  30. return self;
  31. }
  32. //同上
  33. -(void)awakeFromNib{
  34. [super awakeFromNib];
  35. [self attachTapHandler];
  36. }
  37. -(void)handleTap:(UIGestureRecognizer*) recognizer{
  38. [self becomeFirstResponder];
  39. UIMenuController *menu = [UIMenuController sharedMenuController];
  40. [menu setTargetRect:self.frame inView:self.superview];
  41. [menu setMenuVisible:YES animated:YES];
  42. }
  43. @end

在view里添加一个UICopyLabel

现在可以使用UICopyLabel实现双击来对label的内容copy了

在你的view中

UICopyLabel *display = [[UICopyLabelalloc]initWithFrame:CGRectMake(30,100,250,30)];

awakeFromNib

在使用IB的时候才会涉及到此方法的使用,当.nib文件被加载的时候,会发送一个awakeFromNib的消息到.nib文件中的每个对象,每个对象都可以定义自己的awakeFromNib函数来响应这个消息,执行一些必要的操作。

看例子:

创建一个viewController with XIB

定义一个UIView的子类

打开xib,并把View的类型指定为上一步骤定义的子类

然后在TestView.m中加入 awakeFromNib方法,运行程序发现此方法被调用了!!!

下面我们来定制菜单

attachTapHandler中添加长按压手势

  1. -(void)attachTapHandler{
  2. self.userInteractionEnabled = YES;  //用户交互的总开关
  3. //双击
  4. UITapGestureRecognizer *touch = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
  5. touch.numberOfTapsRequired = 2;
  6. [self addGestureRecognizer:touch];
  7. [touch release];
  8. //长按压
  9. UILongPressGestureRecognizer *press = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)];
  10. press.minimumPressDuration = 1.0;
  11. [self addGestureRecognizer:press];
  12. [press release];
  13. }

添加方法longPress

  1. - (void)longPress:(UILongPressGestureRecognizer *)recognizer {
  2. if (recognizer.state == UIGestureRecognizerStateBegan) {
  3. //   TSTableViewCell *cell = (TSTableViewCell *)recognizer.view;
  4. [self becomeFirstResponder];
  5. UIMenuItem *flag = [[UIMenuItem alloc] initWithTitle:@"Flag" action:@selector(flag:)];
  6. UIMenuItem *approve = [[UIMenuItem alloc] initWithTitle:@"Approve" action:@selector(approve:)];
  7. UIMenuItem *deny = [[UIMenuItem alloc] initWithTitle:@"Deny" action:@selector(deny:)];
  8. UIMenuController *menu = [UIMenuController sharedMenuController];
  9. [menu setMenuItems:[NSArray arrayWithObjects:flag, approve, deny, nil]];
  10. [menu setTargetRect:self.frame inView:self.superview];
  11. [menu setMenuVisible:YES animated:YES];
  12. NSLog(@"menuItems:%@",menu.menuItems);
  13. }
  14. }
  15. - (void)flag:(id)sender {
  16. NSLog(@"Cell was flagged");
  17. }
  18. - (void)approve:(id)sender {
  19. NSLog(@"Cell was approved");
  20. }
  21. - (void)deny:(id)sender {
  22. NSLog(@"Cell was denied");
  23. }
  1. -(BOOL)canPerformAction:(SEL)action withSender:(id)sender{
  2. //    return (action == @selector(copy:));
  3. if (action == @selector(copy:)||action == @selector(flag:)||action == @selector(approve:)||action == @selector(deny:)) {
  4. return YES;
  5. }
  6. }

ok。。。效果如图

转载于:https://my.oschina.net/u/874588/blog/102689

UIMenuController的使用,对UILabel拷贝以及定制菜单相关推荐

  1. 一步一步学习OC2007(三)--定制菜单命令

    在前面的两篇文章中,我们讲了如何定制联系人的在线状态,如何定制web 标签页,是不是对OC2007 的魔力有所感触了呢?其实,这只是一个引言,一道开胃菜而已,后面还有更多的大餐等着你呢?今天,我们就一 ...

  2. 03【ArcGIS Pro SDK for Microsoft .NET】系统界面布局及定制菜单

    写在前面 前面的文章介绍了ArcGIS Pro SDK for Microsoft .NET开发环境的搭建,并且我们为创建的demo增加了自己的登陆界面,但是里面的登录逻辑并没有给大家进行详细的介绍, ...

  3. 微信公众平台接口程序定制菜单

    服务号经历一次重审后终于审核通过,抓紧试了一下自定义菜单的功能.主要涉及三块内容,使用开发者凭证获取微信API访问TOKEN,调用微信API创建自定义菜单,响应自定义菜单事件的处理. GitHub代码 ...

  4. iOS 富文本风格NSMutableParagraphStyle、定制UITextView插入图片和定制复制

    问题一 开发过程中,经常会遇到动态计算行高的问题, - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOption ...

  5. ios部分阴影_iOS UIMenuController UIMenuItem第2部分

    ios部分阴影 This is the second part in the series of tutorials on UIMenuController. In this tutorial, we ...

  6. 学习OCS客户端定制

    一步一步学习OCS2007(一)--如何定制在线状态?(转自:http://www.cnblogs.com/invinboy ) OCS 2007(即Microsoft Office Communic ...

  7. 剪切粘贴时总是上次的内容_【Procreate 迷你课堂】#4 三指快速拷贝及粘贴

    Procreate三指快速拷贝及粘贴https://www.zhihu.com/video/1213784489295548416 我们上一期讲解了基本的画布导航快捷手势,而今天我们来科普下如何取代鼠 ...

  8. UIMenuController 和 UIResponderStandardEditActions

    UIMenuController通常负责向用户显示一个"编辑"菜单.当按住一个UITextField或者UITextView不松手的时候,会弹出一个默认的UIMenuControl ...

  9. qmenu基本用法_剖析QMenu Qt完全定制化菜单

    贴张效果图: 定制包括: 1. 周边阴影 2. 菜单项的元素(分割符, 控制ICON大小, 文字显示位置与颜色, 子菜单指示符) 菜单内的效果, 部分可以使用stylesheet实现, 但要做到这样的 ...

最新文章

  1. High1赛因天气不理想取消 球员平分一半奖金
  2. Linux-diff和diff3命令
  3. 【client】与【offset】
  4. Input placeholder属性样式修改(颜色,大小,位置)
  5. django 学习 (二) 模板
  6. 理论基础 —— 索引 —— B 树、B+ 树与 B* 树
  7. TensorFlow中报错 module ‘tensorflow_core._api.v2.train‘ has no attribute ‘GradientDescentOptimize
  8. 软件测试 第三次作业
  9. 牛客练习赛22C Bitset
  10. css 设置input输入内缩进
  11. 计算机技能比赛试题,计算机技能竞赛比赛试题文字录入WORDEXCEL
  12. 数据库范式之间的转换 - 保持函数依赖分解与有/无损分解
  13. C++函数参数的缺省值
  14. 机器学习笔记一. 特征工程
  15. 如何使用WebService服务
  16. 爬取虎牙TV全站主播信息
  17. 推荐一个强大的开源的录制、直播软件(obs-studio)
  18. 详解python 利用 pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)、动态流向图
  19. Java使用QQ邮箱发送邮件
  20. java数字转换中文

热门文章

  1. 01-html介绍和head标签
  2. Windows的Java_HOME环境变更配置
  3. Enterprise Library: Data Access Application Block配置文件分析篇
  4. 《LeetCode力扣练习》第136题 只出现一次的数字 Java
  5. c#_continue 和 break 的区别
  6. angler前端框架_2019几大主流的前端框架,几款目前最热门的前端框架
  7. 单电源运算放大器全波整流电路_几种二极管整流电路原理图解。
  8. qml 自定义消息框_Qt qml 自定义消息提示框
  9. spss聚类分析_SPSS聚类分析 I K均值聚类法案例实操
  10. vuex 源码分析_Vuex源码解析