UIMenuController简单使用

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;
}

你可能感兴趣的:(UIMenuController简单使用)