这里我们要实现的将是选择按钮的自定义

综合上一节的随笔,这里给出效果图。

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的部分操作的更多相关文章

  1. IOS MenuController初步了解

    IOS MenuController初步了解 默认情况下有以下控件已经支持MenuController. UITextField UITextView UIWebView 让其他控件也支持MenuCo ...

  2. iOS sqlite 的各种操作

    iOS --SQL的增加.删除.查找.修改 iOS对于数据库的操作:增加.删除.查找.修改 首先需要创建一个数据库:本程序的数据库是在火狐浏览器里的插件里写的微量型数据库 火狐找查找SQLite Ma ...

  3. iOS 检查app版本更新操作

    iOS 检查app版本更新操作 1:获取本地安装的版本信息: [NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle ...

  4. iOS的I/O操作

    一般而言,处理文件时都要经历以下四个步骤: 1.创建文件 2.打开文件,以便在后面的I/O操作中引用该文件 3.对打开的文件执行I/O操作(读取.写入.更新) 4.关闭文件 iOS中,对文件常见的处理 ...

  5. 在Visual Studio 2013/2015上使用C#开发Android/IOS安装包和操作步骤

    Xamarin 配置手册和离线包下载 http://pan.baidu.com/s/1eQ3qw8a 具体操作: 安装前提条件 1. 安装Visual Studio 2013,安装过程省略,我这里安装 ...

  6. iOS抓包Charles 操作

    今天就来看一下Mac上如何进行抓包,之前有一篇文章介绍了使用Fidder进行抓包 http://blog.csdn.net/jiangwei0910410003/article/details/198 ...

  7. IOS异步和多线程操作&&在sqlite3中的应用

    1,数据库I/O操作(异步) 数据库本身是存储在磁盘上.访问和修改数据库,即对磁盘进行读写,即I/O操作. 磁盘属于计算机硬件,具有DMA能力,不需要CPU干预,可以实现异步操作. I/O操作一般是消 ...

  8. 关于ios中的文本操作-简介

    来源:About Text Handling in iOS 官方文档 iOS平台为我们提供了许多在app中展示文本和让用户编辑文本的方式.同时,它也允许你在app视图中展示格式化的文本和网页内容.你可 ...

  9. iOS 中SQLite数据库操作

    在iOS中实现SQLite数据库的操作:1.导入框架(libsqlite3.0.tbd) 2.导入头文件<sqlite3.h> 3.实现数据的增删改查 实现简单 SQLite数据库操作 的 ...

随机推荐

  1. MYSQL开发性能研究——INSERT,REPLACE,INSERT-UPDATE性能比较

    一.为什么要有这个实验 我们的系统是批处理系统,类似于管道的架构.而各个数据表就是管道的两端,而我们的程序就类似于管道本身.我们所需要做的事情无非就是从A表抽取数据,经过一定过滤.汇总等操作放置到B表 ...

  2. Linux 下 Shell 命令的分类及用法

    当你打算真正操纵好你的 Linux 系统,没有什么能比命令行界面更让你做到这一点.为了成为一个 Linux 高手,你必须能够理解 Shell命令的不同类型,并且会在终端下正确的使用它们. 在 Linu ...

  3. 如何查看distirbution agent的执行进度

    在transactional replication troubleshooting的过程中,经常会遇到下面的场景: 客户在发布端执行了一个几百万行的更新,结果导致性能下降. 客户很想知道目前dist ...

  4. 左倾堆(二)之 C++的实现

    概要 上一章介绍了左倾堆的基本概念,并通过C语言实现了左倾堆.本章是左倾堆的C++实现. 目录1. 左倾堆的介绍2. 左倾堆的图文解析3. 左倾堆的C++实现(完整源码)4. 左倾堆的C++测试程序 ...

  5. debian7.1 sources.list

    deb http://mirrors.163.com/debian wheezy main non-free contribdeb http://mirrors.163.com/debian whee ...

  6. 《你不知道的javascript》一、函数作用域和块作用域

    函数中的作用域 所谓函数作用域,就是属于这个函数的全部变量都可以在整个函数的范围内使用及复用. function foo(a) { var b=a; function bar(c){ var c=b* ...

  7. 如何使用DDMS Heap查看Android应用内存情况

    作为大四毕业生,而且还是二本,加上技术基础不咋样,找工作自然也是辛酸得很...最糟糕的情况就是一开始实在是太小看了求职之路的艰辛,整个9月都是无所事事的度过,直到月底面试腾讯被鄙视后才顿然醒悟,意识到 ...

  8. HashMap的实现原理

    1.HashMap的数据结构 数组的特点是:寻址容易,插入和删除困难:而链表的特点是:寻址困难,插入和删除容易.那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的, ...

  9. [移动开发]全面理解UnityUI系统

    随着 Unity 4.6 发布,新 UI 系统终于与大家见面了. RectTransform Unity UI 系统使用 RectTransform 实现基本的布局和层次控制.RectTransfor ...

  10. 重新想象 Windows 8 Store Apps (39) - 契约: Share Contract

    [源码下载] 重新想象 Windows 8 Store Apps (39) - 契约: Share Contract 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之  ...