iOS中UILabel实现长按复制功能实例代码

 更新时间:2017年10月24日 11:39:22   作者:devilx  
在iOS开发过程中,有时候会用到UILabel展示的内容,那么就设计到点击UILabel复制它上面展示的内容的功能,也就是Label长按复制功能,下面这篇文章主要给大家介绍了关于在iOS中UILabel实现长按复制功能的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。

前言

网上有很多种给Label添加长按复制功能的方法,而在 UILabel 上实现长按复制,我用的是 UIMenuController。在 UITextView、UITextField 中,已经自带了这个东西,但是在 UILabel 上需要自定义。

鉴于有的朋友很少接触 UIMenuController,这里先介绍一些基本知识。

UIMenuController 可以使用系统自带的方法,也可以自定义。

系统默认支持UITextField、UITextView、UIWebView控件的UIMenuController相关操作

更多UIMenuController使用请参考这篇文章:https://www.jb51.net/article/87000.htm

常见的系统方法和使用

- (void)cut:(nullable id)sender NS_AVAILABLE_IOS(3_0);
- (void)copy:(nullable id)sender NS_AVAILABLE_IOS(3_0);
- (void)paste:(nullable id)sender NS_AVAILABLE_IOS(3_0);
- (void)select:(nullable id)sender NS_AVAILABLE_IOS(3_0);
- (void)selectAll:(nullable id)sender NS_AVAILABLE_IOS(3_0);
- (void)delete:(nullable id)sender NS_AVAILABLE_IOS(3_2);

从字面意思就能看出,他们是剪切、复制、粘贴、选择、全选、删除。使用方法很简单。

// 比如我在一个 UITextView 里,想增加全选和复制的方法
// 只要在自定义 UITextView 的时候加入这行代码即可
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
 if(action == @selector(selectAll:) || action == @selector(copy:)) return YES;
 return NO;
}

细心的朋友可能会发现,最后长按出来的文字都是英文,我们改如何把他改成中文呢?如图,在 Project -> Info -> Localizations 中添加 Chinese(Simplified) 即可。

自定义方法和使用

回到主题,我们要在 UILabel 上加入长按复制事件,但是他本身是不支持 UIMenuController 的,所以接下来讲讲自定义方法。

自定义一个 UILabel,设置label可以成为第一响应者

- (BOOL)canBecomeFirstResponder {
 return YES;
}

设置长按事件,在初始化的时候调用这个方法

- (void)setUp {
 /* 你可以在这里添加一些代码,比如字体、居中、夜间模式等 */
 self.userInteractionEnabled = YES;
 [self addGestureRecognizer:[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress)]];
}

长按事件,在里面新建 UIMenuController

- (void)longPress {
 
 // 设置label为第一响应者
 [self becomeFirstResponder];
 
 // 自定义 UIMenuController
 UIMenuController * menu = [UIMenuController sharedMenuController];
 UIMenuItem * item1 = [[UIMenuItem alloc]initWithTitle:@"复制" action:@selector(copyText:)];
 menu.menuItems = @[item1];
 [menu setTargetRect:self.bounds inView:self];
 [menu setMenuVisible:YES animated:YES];
}

设置label能够执行那些

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
 if(action == @selector(copyText:)) return YES;
 return NO;
}

// 如果模仿上面的写以下代码,点击后会导致程序崩溃
if(action == @selector(selectAll:) || action == @selector(copy:)) return YES; 

方法的具体实现

- (void)copyText:(UIMenuController *)menu {
 // 没有文字时结束方法
 if (!self.text) return;
 // 复制文字到剪切板
 UIPasteboard * paste = [UIPasteboard generalPasteboard];
 paste.string = self.text;
 
}

最终效果:


附上 DEMO (本地下载),自定义的 UILabel 可以直接拖走使用

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • iOS如何裁剪圆形头像

    iOS如何裁剪圆形头像

    这篇文章主要介绍了iOS如何裁剪圆形头像的方法,如何为圆形头像加边框,如何进行截图操作,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • iOS中NSObject的两种含义:类和协议详解

    iOS中NSObject的两种含义:类和协议详解

    这篇文章主要给大家介绍了关于iOS中NSObject的两种含义:类和协议的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • iOS实现scrollview上拉显示Navbar下拉隐藏功能详解

    iOS实现scrollview上拉显示Navbar下拉隐藏功能详解

    这篇文章主要给大家介绍了利用iOS实现scrollview上拉显示Navbar下拉隐藏功能的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • iOS应用开发中运用设计模式中的组合模式的实例解析

    iOS应用开发中运用设计模式中的组合模式的实例解析

    这篇文章主要介绍了iOS应用开发中运用设计模式中的组合模式的实例解析,示例代码为传统的Objective-C,需要的朋友可以参考下
    2016-03-03
  • iOS 9 Core Spotlight搜索实例代码

    iOS 9 Core Spotlight搜索实例代码

    本文主要讲解 iOS 9 Core Spotlight,在 IOS 开发的时候有时候会用到搜索功能,这里给大家一个实例作为参考,有需要的小伙伴可以参考下
    2016-07-07
  • 比较IOS开发中常用视图的四种切换方式

    比较IOS开发中常用视图的四种切换方式

    这篇文章给大家介绍了在IOS开发中常用视图的四种切换方式以及这四种方式的优缺点,这四种方式包括:push,pop、modal、切换窗口的根控制器和添加子视图,有需要的可以参考借鉴。
    2016-08-08
  • IOS 中loadView,viewDidLoad,viewDidUnload详解及使用

    IOS 中loadView,viewDidLoad,viewDidUnload详解及使用

    这篇文章主要介绍了IOS 中loadView,viewDidLoad,viewDidUnload详解及使用的相关资料,需要的朋友可以参考下
    2017-02-02
  • iOS10 适配-Xcode8问题总结及解决方案

    iOS10 适配-Xcode8问题总结及解决方案

    这篇文章主要介绍了iOS10 适配-Xcode8问题总结的相关资料,这里整理了遇到的几种问题,并给出解决方案,需要的朋友可以参考下
    2016-11-11
  • iOS 通过collectionView实现照片删除功能

    iOS 通过collectionView实现照片删除功能

    这篇文章主要介绍了iOS 通过collectionView实现照片删除功能,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-11-11
  • iOS 10自定义相机功能

    iOS 10自定义相机功能

    这篇文章主要为大家详细介绍了iOS 10自定义相机功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04

最新评论