文本段的总体复制

Posted wzzkaifa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本段的总体复制相关的知识,希望对你有一定的参考价值。

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

对复制的操作通常是在标签栏上(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];
}

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

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

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

技术分享






以上是关于文本段的总体复制的主要内容,如果未能解决你的问题,请参考以下文章

vs code 自定义代码片段

如何将数据从活动传输到片段? [复制]

我应该如何使用 Outlook 发送代码片段?

;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk

VS2015 代码片段整理

如何沿着文本段的边界框画一条线?