美文网首页
iOS 给Label实现一个简单的复制 UIMenuContro

iOS 给Label实现一个简单的复制 UIMenuContro

作者: JasonFive | 来源:发表于2021-06-17 11:42 被阅读0次

    给Label实现一个简单的复制,直接来代码

    - (void)initSubview
    {
       // 第一步:添加长按手势
       UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(copyLogisticsAddress)];
       [self.logisticsInfoLabel addGestureRecognizer:longPressGesture];
       self.logisticsInfoLabel.userInteractionEnabled = YES;
    }
    
    // 第二步:使Label能成为第一响应者
    - (BOOL)canBecomeFirstResponder
    {
       return YES;
    }
    
    - (void)copyLogisticsAddress
    {
       // 第三步:设置第一响应者(必须要有这一步,不然Menu不显示)
       [self becomeFirstResponder];
       
       // 初始化 Menu
       UIMenuController *menu = [UIMenuController sharedMenuController];
       
       // 判断 Menu是否显示,因为这个手势会调多次
       if (menu.isMenuVisible) return;
       
       // 设置 复制Item,每一个选项都是一个 UIMenuItem 对象
       UIMenuItem *copyItem = [[UIMenuItem alloc] initWithTitle:@"复制" action:@selector(copyAddress)];
       
       [menu setMenuItems:@[copyItem]]; // 设置
       
       // 设置点击区域和显示位置(这里设置为 SuperView 让它显示在 Label 正上方,不然会显示在 Label 右下角)
       [menu setTargetRect:self.logisticsInfoLabel.frame inView:self.logisticsInfoLabel.superview];
       
       // 显示
       [menu setMenuVisible:YES animated:YES];
    }
    
    // 第四步: 设置Label能具体执行的哪些方法
    - (BOOL)canPerformAction:(SEL)action withSender:(id)sender
    {
       return (action == @selector(copyAddress));
    }
    
    // 第五步:复制到剪切板
    - (void)copyAddress
    {
       UIPasteboard *board = [UIPasteboard generalPasteboard];
       board.string = self.logisticsInfoLabel.text;
    }
    
    // 第六步:隐藏 Menu ,这一步可要可不要
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
       [[UIMenuController sharedMenuController] setMenuVisible:NO];
    }
    
    

    O 啦

    相关文章

      网友评论

          本文标题:iOS 给Label实现一个简单的复制 UIMenuContro

          本文链接:https://www.haomeiwen.com/subject/qmfcyltx.html