IOS MenuController的部分操作
这里我们要实现的将是选择按钮的自定义
综合上一节的随笔,这里给出效果图。

ViewController.m
//
// ViewController.m
// CX-MenuController
//
// Created by ma c on 16/4/7.
// Copyright © 2016年 xubaoaichiyu. All rights reserved.
// #import "ViewController.h"
#import "CXLabel.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@property (weak, nonatomic) IBOutlet CXLabel *label; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; [self.webView loadHTMLString:@"<div>旭宝爱吃鱼旭宝爱吃鱼旭宝爱吃鱼旭宝爱吃鱼旭宝爱吃鱼旭宝爱吃鱼旭宝爱吃鱼旭宝爱吃鱼旭宝爱吃鱼旭宝爱吃鱼旭宝爱吃鱼旭宝爱吃鱼旭宝爱吃鱼旭宝爱吃鱼旭宝爱吃鱼</.div>" baseURL:nil]; UILongPressGestureRecognizer * longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(click)];
[self.label addGestureRecognizer:longPress]; } -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self.view endEditing:YES]; } - (void)click{
//让自己成为第一响应者
[self.label becomeFirstResponder];
//初始化menu
UIMenuController * menu = [UIMenuController sharedMenuController]; UIMenuItem * xu = [[UIMenuItem alloc]initWithTitle:@"旭" action:@selector(xu)];
UIMenuItem * bao = [[UIMenuItem alloc]initWithTitle:@"宝" action:@selector(bao)];
UIMenuItem * ai = [[UIMenuItem alloc]initWithTitle:@"爱" action:@selector(ai)];
UIMenuItem * chi = [[UIMenuItem alloc]initWithTitle:@"吃" action:@selector(chi)];
UIMenuItem * yu = [[UIMenuItem alloc]initWithTitle:@"鱼" action:@selector(yu)]; menu.menuItems = @[xu,bao,ai,chi,yu]; //设置menu的显示位置
[menu setTargetRect:self.label.frame inView:self.view];
//让menu显示并且伴有动画
[menu setMenuVisible:YES animated:YES]; } - (void)xu{ }
- (void)bao{ }
-(void)ai{ }
-(void)chi{ }
-(void)yu{ } @end
CXLabel.m
//
// CXLabel.m
// CX-MenuController
//
// Created by ma c on 16/4/7.
// Copyright © 2016年 xubaoaichiyu. All rights reserved.
// #import "CXLabel.h" @implementation CXLabel - (void)awakeFromNib{
[self setup];
}
-(instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
} - (void)setup{
//允许用户交互
self.userInteractionEnabled = YES;
}
//允许自己成为第一响应者
- (BOOL)canBecomeFirstResponder{
return YES;
}
//Label能够执行哪些操作(menu)
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{ // if (action == @selector(copy:) || action == @selector(cut:) || action == @selector(paste:)) {
// return YES;
// } return NO;
} - (void)copy:(id)sender{
//复制版
UIPasteboard * paste = [UIPasteboard generalPasteboard]; paste.string = self.text; } - (void)cut:(id)sender{ UIPasteboard * paste = [UIPasteboard generalPasteboard]; paste.string = self.text; self.text = nil; } - (void)paste:(id)sender{ UIPasteboard * paste = [UIPasteboard generalPasteboard]; self.text = paste.string; } @end
IOS MenuController的部分操作的更多相关文章
- IOS MenuController初步了解
IOS MenuController初步了解 默认情况下有以下控件已经支持MenuController. UITextField UITextView UIWebView 让其他控件也支持MenuCo ...
- iOS sqlite 的各种操作
iOS --SQL的增加.删除.查找.修改 iOS对于数据库的操作:增加.删除.查找.修改 首先需要创建一个数据库:本程序的数据库是在火狐浏览器里的插件里写的微量型数据库 火狐找查找SQLite Ma ...
- iOS 检查app版本更新操作
iOS 检查app版本更新操作 1:获取本地安装的版本信息: [NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle ...
- iOS的I/O操作
一般而言,处理文件时都要经历以下四个步骤: 1.创建文件 2.打开文件,以便在后面的I/O操作中引用该文件 3.对打开的文件执行I/O操作(读取.写入.更新) 4.关闭文件 iOS中,对文件常见的处理 ...
- 在Visual Studio 2013/2015上使用C#开发Android/IOS安装包和操作步骤
Xamarin 配置手册和离线包下载 http://pan.baidu.com/s/1eQ3qw8a 具体操作: 安装前提条件 1. 安装Visual Studio 2013,安装过程省略,我这里安装 ...
- iOS抓包Charles 操作
今天就来看一下Mac上如何进行抓包,之前有一篇文章介绍了使用Fidder进行抓包 http://blog.csdn.net/jiangwei0910410003/article/details/198 ...
- IOS异步和多线程操作&&在sqlite3中的应用
1,数据库I/O操作(异步) 数据库本身是存储在磁盘上.访问和修改数据库,即对磁盘进行读写,即I/O操作. 磁盘属于计算机硬件,具有DMA能力,不需要CPU干预,可以实现异步操作. I/O操作一般是消 ...
- 关于ios中的文本操作-简介
来源:About Text Handling in iOS 官方文档 iOS平台为我们提供了许多在app中展示文本和让用户编辑文本的方式.同时,它也允许你在app视图中展示格式化的文本和网页内容.你可 ...
- iOS 中SQLite数据库操作
在iOS中实现SQLite数据库的操作:1.导入框架(libsqlite3.0.tbd) 2.导入头文件<sqlite3.h> 3.实现数据的增删改查 实现简单 SQLite数据库操作 的 ...
随机推荐
- ionic 添加地图定位功能
由于项目需求,需要一个定位功能,通过google或百度,搜到一个cordova-plugin-geolocation的插件,在ios上可以用,但是在android就呵呵了,原因就不说了,大家都知道.所 ...
- [SLAM] Studying Guidance
Books from Zhihu: 幽默一把 看完Gonzalez:嗯,好像很好玩的样子,我也来搞一搞.看完Price:什么鬼,怎么这么多公式,公式看不懂肿么破.看完Szeliski:原来用一千页的书 ...
- 《微信小程序七日谈》- 第一天:人生若只如初见
<微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 微信小 ...
- django 快速实现注册
前言 对于web开来说,用户登陆.注册.文件上传等是最基础的功能,针对不同的web框架,相关的文章非常多,但搜索之后发现大多都不具有完整性,对于想学习web开发的新手来说不具有很强的操作性:对于web ...
- [python]pythonic的字典常用操作
注意:dct代表字典,key代表键值 1.判断字典中某个键是否存在 实现 dct.has_key(key) #False 更Pythonic方法 key in dct #False 2.获取字典中的值 ...
- 开放产品开发(OPD):Archi 汉化工具下载
本文更新版本已挪至 http://www.zhoujingen.cn/blog/3378.html ------------------------------ 在OPD中,我们使用了ArchiMa ...
- js-变量
一.变量的类型 Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量.例如: ...
- 在node.js中使用COOKIE
node.js中如何向客户端发送COOKIE呢?有如下两个方案: 一.使用response.writeHead,代码示例: //设置过期时间为一分钟 var today = new Date(); v ...
- 虚拟机安装CentOS6.3两个问题
虚拟机下CentOS安装教程:http://blog.csdn.net/21aspnet/article/details/6961518 由于前一阵子重新装win7,win7下的虚拟机CentOS也就 ...
- CodeBlocks VS2015编译环境设置
1. 菜单 Settings --> Compiler... 2. 设置vs 的安装路径