UIMenuController
- 经常可以看到有些软件中,在一行文字上按一下,就弹出一个菜单栏
- 这种效果苹果自带了一个,就是我们今天要介绍的
UIMenuController
- 想要实现这种效果,分两种情况,一种是控件自己带有的,一种是不带有的控件,我们自己手动添加的
- 控件自己带有的:UITextField、UITextView、UIWebView
需要自己添加的控件,比如说Label
系统自带的一些操作
- 如果显示的文字啥的想要复制、剪切之类的操作,那么可以自定义
- 自定义步骤:
- 自定义控件
- 让控件成为第一响应者
- 然后创建UIMenuController
- 设置UIMenuController指向的范围
- 显示UIMenuController
/** 让label有资格成为第一响应者*/
- (BOOL)canBecomeFirstResponder
{
return YES;
}
/**
* label能执行哪些操作(比如copy, paste等等)
* @return YES:支持这种操作
*/
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
// 想要的操作返回YES就行,具体有什么操作,可以打印action看,然后实现相应的方法就行
if (action == @selector(cut:) || action == @selector(copy:) || action == @selector(paste:)) return YES;
return NO;
}
// 在需要显示的时候调用以下代码
// label要成为第一响应者,UIMenuController的显示依赖第一响应者
// 第一响应者变化的时候,UIMenuController会自动消失
[self becomeFirstResponder];
// 创建MenuController,是个单例
UIMenuController *menu = [UIMenuController sharedMenuController];
// targetRect: UIMenuController需要指向的矩形框
// targetView: targetRect会以targetView的左上角为坐标原点
// 下面两种方式效果相同
// rect填写自己的bounds,那么view就要写self,自己
// rect填写自己的frame,那么View就要写自己的父控件
[menu setTargetRect:self.bounds inView:self];
// [menu setTargetRect:self.frame inView:self.superview];
[menu setMenuVisible:YES animated:YES];
可以自定义一些操作
- 比如举报、点赞、分享等等
- 自定义大体流程还是和上面的一样,只是需要自己添加MenuItem
// 添加MenuItem
UIMenuItem *share = [[UIMenuItem alloc] initWithTitle:@"分享" action:@selector(share:)];
UIMenuItem *support = [[UIMenuItem alloc] initWithTitle:@"点赞" action:@selector(support:)];
UIMenuItem *report = [[UIMenuItem alloc] initWithTitle:@"举报" action:@selector(report:)];
menu.menuItems = @[share, support, report];
// 这个方法中需要返回NO,屏蔽系统自带的事件
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
return NO;
}