文本段的整体复制

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

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

在通常情况下,需要复制的文本都是在较深层次的视图,一般要通过协议实现具体的方法,这里只是简要说明。另外还可以自定义弹出点(复制小窗口)的位置。

上传一个示例,展示一下效果:

文本段的整体复制,布布扣,bubuko.com

时间: 06-13

文本段的整体复制的相关文章

JavaFX2 - 文本可复制的Label

背景介绍 我的公司和我个人一直都使用JavaFX2来编写客户端应用程序,同时也作为Applet在浏览器中运行. 我们的客户曾经拿我们的产品和网页对比,然后向我们提过两个需求: (1) 希望界面上所有的文字都可以被复制,尤其是界面中的一些有参考意义的文字(而这些文字不可被编辑也不需要被编辑) (2) 希望可以打印界面的内容,乃至滚动条中没有显示出来的内容 遗憾的是,以上两点我都没能很好的解决.以后在这两方面我还会继续学习和研究. 文本可复制的Label方案 今天这篇文章主要说的是如何让Label中

Vector::构造,复制构造,析构

构造函数: // 构造函数 Vector(int c = DEFAULT_CAPACITY, int s = 0, T v = 0) //容量为c.规模为s.所有元素初始为v { _elem = new T[_capacity = c]; for (_size = 0; _size < s; _elem[_size++] = v); } //s <= c 复制构造函数: 从A数组中为[lo,hi)的左闭右开区间复制数据到vector对象: template <typename T>

【UI-基础】富文本

与NSString类似,在iOS中AttributedString也分为NSAttributedString和NSMutableAttributedString,不同的是,AttributedString对象多了一个Attribute的概念,一个AttributedString的对象包含很多的属性,每一个属性都有其对应的字符区域,在这里是使用NSRange来进行描述的. 使用AttributedString的方式通常有两种: 方式一: 首先初始化一个NSMutableAttributedStri

js限制textarea文本框的文字个数

现在发微博,那个文本框一般只能输入200字好像,再多就会自动删除,要么是提示字数受限,用Js就可实现本功能.今天带来的这个Js限制表单文本 框文字数量的例子,相信有此方面需要的是个不错的参考.为了便于使用,这里把代码拆分为HTML表单部分和JavaScript代码部分: HTML表单部分,代码如下: <form name=myform action=""> <textarea name="message" wrap="physical&q

iOS之富文本

之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结果在XCode中查遍其所有属性才发现,UITextView居然没有调整行间距的接口,于是忍住不心里抱怨了一下下. 但是问题还是要解决的,上网一查才发现,iOS不仅有富文本处理的功能,而且对于文字排版的处理能力那是相当的强大,看来我是孤陋寡闻了. 正题开始之前插播一点基础知识: 在iOS中或者Mac OS X中怎样才能

vim 粘贴复制操作

原文链接:http://www.cnblogs.com/lansh/archive/2010/08/19/1803378.html vi编辑器有3种模式:命令模式.输入模式.末行模式.掌握这三种模式十分重要: 命令模式:vi启动后默认进入的是命令模式,从这个模式使用命令可以切换到另外两种模式,同时无论在任何模式下只要按一下[Esc]键都可以返回命令模式.在命令模式中输入字幕"i"就可以进入vi的输入模式编辑文件. 输入模式:在这个模式中我们可以编辑.修改.输入等编辑工作,在编辑器最后一

iOS之富文本(二)

之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结果在XCode中查遍其所有属性才发现,UITextView居然没有调整行间距的接口,于是忍住不心里抱怨了一下下. 但是问题还是要解决的,上网一查才发现,iOS不仅有富文本处理的功能,而且对于文字排版的处理能力那是相当的强大,看来我是孤陋寡闻了. 正题开始之前插播一点基础知识: 在iOS中或者Mac OS X中怎样才能

ios富文本

之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结果在XCode中查遍其所有属性才发现,UITextView居然没有调整行间距的接口,于是忍住不心里抱怨了一下下. 但是问题还是要解决的,上网一查才发现,iOS不仅有富文本处理的功能,而且对于文字排版的处理能力那是相当的强大,看来我是孤陋寡闻了. 正题开始之前插播一点基础知识: 在iOS中或者Mac OS X中怎样才能

MySQL复制之理论篇

一.MySQL复制概述 MySQL支持两种复制方式:基于行的复制和基于语句的复制(逻辑复制).这两种方式都是通过在主库上记录 二进制日志.在备库重放日志的方式来实现异步的数据复制,其工作原理如下图: 同一时间点主库和备库的数据可能存在不一致.复制通常不会增加主库的开销,主要是启用二进制日志带来的开 销.通过复制可以将读操作指向备库来获得更好的读扩展,但对于写操作,除非设计得当,否则并不适合通过复制来 扩展写操作.在一主库多备库的架构中,写操作会被执行多次,这时候整个系统的性能取决于写入最慢的那部