实现点击label 弹出UIMenuController

首先说一说UIMenuController

  • 默认情况下, 有以下控件已经支持UIMenuController
    • UITextField
    • UITextView
    • UIWebView
也可以 让其他控件也支持UIMenuController(比如UILabel)
  • 自定义UILabel
  • 重写2个方法
/**
 * 让label有资格成为第一响应者
 */
- (BOOL)canBecomeFirstResponder
{
    return YES;
}

/**
 * label能执行哪些操作(比如copy, paste等等)
 * @return  YES:支持这种操作
 */
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(cut:) || action == @selector(copy:) || action == @selector(paste:)) return YES;

    return NO;
}
//给label添加点击手势
- (void)setGestureRecognizer
{
    self.userInteractionEnabled = YES;
    [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelClick)]];
}

- (void)labelClick
{
    // 1.label要成为第一响应者(作用是:告诉UIMenuController支持哪些操作, 这些操作如何处理)
    [self becomeFirstResponder];
    
    // 2.显示MenuController
    UIMenuController *menu = [UIMenuController sharedMenuController];
    // targetRect: MenuController需要指向的矩形框
    // targetView: targetRect会以targetView的左上角为坐标原点
    [menu setTargetRect:self.bounds inView:self];
//    [menu setTargetRect:self.frame inView:self.superview];
    [menu setMenuVisible:YES animated:YES];
}

  • 实现各种操作方法
- (void)cut:(UIMenuController *)menu
{
    // 将自己的文字复制到粘贴板
    [self copy:menu];

    // 清空文字
    self.text = nil;
}

- (void)copy:(UIMenuController *)menu
{
    // 将自己的文字复制到粘贴板
    UIPasteboard *board = [UIPasteboard generalPasteboard];
    board.string = self.text;
}

- (void)paste:(UIMenuController *)menu
{
    // 将粘贴板的文字 复制 到自己身上
    UIPasteboard *board = [UIPasteboard generalPasteboard];
    self.text = board.string;
}

自定义UIMenuController内部的Item

  • 添加item
// 添加MenuItem(点击item, 默认会调用控制器的方法)
UIMenuItem *spot = [[UIMenuItem alloc] initWithTitle:@"支持" action:@selector(ding:)];
UIMenuItem *replay = [[UIMenuItem alloc] initWithTitle:@"回复" action:@selector(replay:)];
UIMenuItem *report = [[UIMenuItem alloc] initWithTitle:@"举报" action:@selector(report:)];
menu.menuItems = @[spot, replay, report];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,002评论 25 709
  • “人之所以不快乐,是因为太关心利益。”这句话,已经讲烂,甚至产生逆反对抗。 关注利益是否真的不正确?这在每个人的心...
    马不理馒头阅读 2,224评论 0 1
  • 人生或许就是一个一直在寻找自我的过程吧。 总是在想自己真正想要的是什么,可总也找不到答案,好像自己对什么都不感兴趣...
    Joker_宇阅读 1,670评论 0 0
  • 一、安装依赖: npm i webpack -g npm i karma-cli -g npm i @ionic/...
    Gary嘉骏阅读 3,658评论 0 1
  • 【吃一包泡面需肝脏解毒32天】泡面都经过油炸,油中添加了BHT(防止食物酸化的安定剂),最可怕的是碗装泡面,碗的材...
    勤录阅读 3,051评论 3 3

友情链接更多精彩内容