• 文本段的总体复制


    在做项目的时候常常遇到一些地方须要复制文本框的内容,尽管简单但还是稍做总结。

    对复制的操作通常是在标签栏上(Label)。响应通常是长按手势(LongPressGesture),其它情况不做赘述。

    首先声明一个方法:

    - (void)copyActionWithView:(UIView *)view WithString:(NSString *)text WithSuperView:(UIView *)superView;
    在标签栏上加入手势,设置可触摸属性:

    _contentLabel.userInteractionEnabled = YES;
    UILongPressGestureRecognizer * longPressGR = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
    [_contentLabel addGestureRecognizer:longPressGR];

    - (void)longPress:(UILongPressGestureRecognizer *)sender{
        if (sender.state == UIGestureRecognizerStateBegan) {
            [self copyActionWithView:sender.view WithString:self.contentLabel.text WithSuperView:nil];
        }
    }

    实现:(一般在控制器上)

    - (void)copyActionWithView:(UIView *)view WithString:(NSString *)text WithSuperView:(UIView *)superView{
        [self becomeFirstResponder];
        self.ownCopyString = text;
        UIMenuController *menu = [UIMenuController sharedMenuController];
        UIMenuItem * copy = [[UIMenuItem alloc] initWithTitle:@"复制" action:@selector(copyAction:)];
        menu.menuItems = [NSArray arrayWithObjects: copy, nil];
        CGRect targetRect;
        if (superView) {
            CGRect beginRcet = [view convertRect:view.frame toView:superView];
            CGRect minRect = [superView convertRect:superView.frame toView:superView.superview];
            CGRect endRect = [superView.superview convertRect:superView.superview.frame toView:self.view];
            targetRect.origin.y = endRect.origin.y + minRect.origin.y / 2.0 + beginRcet.origin.y / 2.0 + 8;
        }else{
            targetRect = [view convertRect:view.frame toView:self.view];
            targetRect.origin.y -= 20;
        }
        targetRect.origin.x = 110;
        targetRect.size.width = 100;
        targetRect.size.height = 17.1;
        [menu setTargetRect:targetRect inView:self.view];
        [menu setMenuVisible:YES animated:YES];
    }
    
    - (BOOL)canPerformAction:(SEL)action withSender:(id)sender
    {
        if (action == @selector(copyAction:)) {
            return YES;//显示
        }
        return NO;//不显示
    }
    
    - (BOOL)canBecomeFirstResponder{
        return YES;
    }
    
    - (void)copyAction:(id)sender{
        UIPasteboard * pasteboard = [UIPasteboard generalPasteboard];
        [pasteboard setString:self.ownCopyString];
    }

    在通常情况下,须要复制的文本都是在较深层次的视图,一般要通过协议实现详细的方法。这里仅仅是简要说明。

    另外还能够自己定义弹出点(复制小窗体)的位置。

    上传一个演示样例。展示一下效果:







  • 相关阅读:
    POJ3213(矩阵乘法)
    jquery:ajax不接收返回值回
    Swift UI学习UITableView and protocol use
    也可以看看GCD(杭州电2504)(gcd)
    数据结构—队列
    HDU 4946 Area of Mushroom 凸包
    UVa 353
    照片教你eclipse通过使用gradle 打包Android
    普林斯顿大学公开课 算法1-8:并检查集合 高速查找
    Codeforces Round #246 (Div. 2)
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7261292.html
Copyright © 2020-2023  润新知