菜单事件包括,剪切、拷贝、全选、分享...,此 demo 只有 copy、share
1.定义 field 继承与 UITextField
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
if (action == @selector(copy:)) {
return YES;
}
return NO;
} - (void)copy:(id)sender {
[self resignFirstResponder];
//持久化,退出程序 copy 的内容还在
[[UIPasteboard generalPasteboard]setPersistent:YES];
//拷贝的内容
[[UIPasteboard generalPasteboard]setValue:self.text forPasteboardType:[UIPasteboardTypeListString objectAtIndex:]];
}
2.ViewController 加载
field = [[CCField alloc]initWithFrame:CGRectMake(, , , )];
field.backgroundColor = [UIColor greenColor];
[self.view addSubview:field]; UIMenuItem *shareItem = [[UIMenuItem alloc]initWithTitle:@"分享" action:@selector(click)];
UIMenuController *menu = [UIMenuController sharedMenuController];
[menu setMenuItems:[NSArray arrayWithObjects:shareItem, nil]];
3.分享的实现,以微信为例,准备工作在这里
SendMessageToWXReq *sendReq = [[SendMessageToWXReq alloc]init];
// 使用文本信息
sendReq.bText = YES;
// 发到还有列表 , 默认是 0
sendReq.scene = ; sendReq.text = field.text;
//发送分享信息
[WXApi sendReq:sendReq];
NSLog(@"");
二 自定义,使用 UIMenuController
1.使 view 变成第一响应者
2.初始化 UIMenuItem 加入 UIMenuController 中
3.实现 canPerformAction: withSender: 方法
还是以复制为例
- (BOOL)canBecomeFirstResponder {
return YES;
} - (void)click:(UITapGestureRecognizer *)tap {
//要显示 menu 必须将触碰的 View 设为第一响应对象
[self.view becomeFirstResponder];
UIMenuController *menuController = [UIMenuController sharedMenuController];
UIMenuItem *copyItem = [[UIMenuItem alloc]initWithTitle:@"复制" action:@selector(click)];
menuController.menuItems = @[copyItem];
//设置 menu 的 frame和父 view
[menuController setTargetRect:CGRectMake(_label.frame.origin.x, _label.frame.origin.y, , ) inView:self.view];
[menuController setMenuVisible:YES animated:YES];
}
完成demo 在 githud,点我查看