swift3 UIMenuController及UIPasteboard的使用

最近项目中,用到了复制,剪切的功能,这里记录一下
系统自带的input视图的话,是默认有这个功能的,我们现在长按一个label,来实现这个功能。
先说一下UIMenuController,这个就是长按之后,会弹出的那个黑黑的框,如图


image1.png

先在xib上创建一个label(这里就是copyNumberLabel),设置isUserInteractionEnabled为true,下边就直接上代码
先创建一个长按手势

let tap:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(showMenu(_:)))
        copyNumberLabel.addGestureRecognizer(tap)

手势方法实现

func showMenu(_ sender: UILongPressGestureRecognizer) {
        if sender.state == .began {//判断是手势状态,如果不写,你会发现松开手势之后还会再一次触发这个方法
            self.becomeFirstResponder()//这个必须写,不写就不会显示
            menu = UIMenuController.shared
            let item:UIMenuItem = UIMenuItem(title: "复制", action: #selector(copyText))//设置显示的item
            menu.menuItems = [item]
            menu.setTargetRect((sender.view?.frame)!, in: self.view)
            menu.setMenuVisible(true, animated: true)//显示UIMenuController
        }
    }

接下来实现点击item的实现方法

let original:String = copyNumberLabel.text!//原始字符串
        let count = original.characters.count
        let index = original.index(original.startIndex, offsetBy: count - 6)//把后边6个字符串截取掉不要
        let resultString = original.substring(to: index)//截取后的字符串
        let board = UIPasteboard.general//系统的剪切板
        board.string = resultString//系统的剪切板保存结果字符串(如果是截取图片,就设置board.image = 你的图片)

这个时候你会发现,点击没有出现那个黑黑的,需要重写系统的这个属性的getter方法

override var canBecomeFirstResponder: Bool {
        return true
    }

到此,你以为就完结了?还有一个问题就是,你发现,第一次长按没有反应,第二次会出现,原因就是你没有把UIMenuController的对象设为全局的,在类文件开始的地方设置为属性就行了

var menu:UIMenuController!

另,这里实现的是copy,如果想实现cut,我也只是一个设想,只需要在点击item的那个方法里,把你label的text设置为空就可以了,变相的实现了剪切功能😄😄。
--------------分割线---------------
如果你不满足,想要一个可以实现选择范围,以及更多的功能,告诉你一个很厉害的方法,用textfield代替label来显示文本,长按,你会发现,功能很多哦。哈哈

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 74,622评论 12 116
  • UIMenuController苹果官方文档 示例代码下载地址 1. UIMenuController简介 在很多...
    断剑阅读 14,432评论 21 56
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 15,355评论 7 217
  • 上学时, 最期待是这个分, 可它总和我开玩笑, 它总是偷偷往我同桌试卷上跑, 没办法, 我拼命地学, 可它总不光顾...
    旖旎i阅读 41评论 5 6
  • 距离自己上一次去到书店,已是很长一段时间。其间,所有的资料书、图书,全部都是在网上轻松下单。而今天,借着空闲有机会...
    安戈洛阅读 54评论 0 1