在有很多信息需要復(fù)制咐刨,但是布局又是采用的自定義view的時(shí)候雕拼,可以給自定義的view添加復(fù)制功能伪阶,自定義需要復(fù)制的內(nèi)容
一煞檩、iOS已經(jīng)有一些控件自帶了復(fù)制功能
1、UITextView
2栅贴、UITextField
3斟湃、UIWebView
4、WKWebView
一些簡(jiǎn)單的文本如果需要復(fù)制檐薯,可以直接使用UITextView替代UILabel凝赛,但是如果想U(xiǎn)ILabe或者自定義的view也有復(fù)制的功能,可以繼續(xù)往下看
二坛缕、需要知道的內(nèi)容
1墓猎、UIPasteboard -- 用來放入需要復(fù)制的內(nèi)容,可以放文本和圖片赚楚,url等
2毙沾、UIMenuController -- 用來創(chuàng)建顯示的菜單選項(xiàng)
自定義的菜單選項(xiàng)
3、自定義view實(shí)現(xiàn)canPerformAction:withSender:方法宠页,他返回一個(gè)bool值左胞,用來判斷哪些方法對(duì)應(yīng)的菜單可以顯示出來
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if action == #selector(self.customAction) {
return true
}
if action == #selector(self.moreMenuAction) {
return true
}
return false
}
實(shí)現(xiàn)canBecomeFirstResponder屬性,代表改自定義view可以成為第一響應(yīng)者举户,這樣才能獲得相應(yīng)事件
override var canBecomeFirstResponder: Bool {
return true
}
自定義改view的時(shí)候烤宙,還需要設(shè)置屬性isUserInteractionEnabled為true
self.isUserInteractionEnabled = true
三、注意上面的內(nèi)容俭嘁,就可以給自定義的view加上復(fù)制粘貼以及更多的高級(jí)功能了
class MyCopyView: USBaseView {
let label1 = UILabel()
let textField = UITextField()
override func setup() {
super.setup()
self.isUserInteractionEnabled = true
self.label1.us.customize { (view) in
self.addSubview(view)
view.isUserInteractionEnabled = true
view.text = "復(fù)制的數(shù)據(jù)"
view.textColor = UIColor.red
}
self.textField.us.customize { (view) in
self.addSubview(view)
view.backgroundColor = UIColor.red
view.text = "填寫數(shù)據(jù)"
view.textColor = UIColor.green
}
self.label1.snp.makeConstraints { (make) in
make.top.leading.bottom.equalToSuperview()
make.width.equalTo(Utils.screenWidth / 2)
}
self.textField.snp.makeConstraints { (make) in
make.leading.equalTo(self.label1.snp.trailing)
make.top.trailing.equalToSuperview()
make.height.equalTo(30)
}
let gesture = UILongPressGestureRecognizer(target: self, action: #selector(self.handleLongGesture(recognizer:)))
self.addGestureRecognizer(gesture)
}
override var canBecomeFirstResponder: Bool {
return true
}
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if action == #selector(self.customAction) {
return true
}
if action == #selector(self.moreMenuAction) {
return true
}
return false
}
func handleLongGesture(recognizer: UIGestureRecognizer) {
if let recognizerView = recognizer.view,
let recognizerSuperView = recognizerView.superview
{
if !UIMenuController.shared.isMenuVisible {
let menuController = UIMenuController.shared
let item1 = UIMenuItem(title: "自定義功能1", action: #selector(self.customAction))
let item2 = UIMenuItem(title: "...", action: #selector(self.moreMenuAction))
menuController.menuItems = [item1, item2]
menuController.setTargetRect(recognizerView.frame, in: recognizerSuperView)
menuController.setMenuVisible(true, animated:true)
recognizerView.becomeFirstResponder()
}
}
}
func customAction() {
print("自定義功能1躺枕,這個(gè)就叫做復(fù)制吧")
UIPasteboard.general.string = self.label1.text
// UIPasteboard.general.image = UIImage(named: "icon_touch") // 復(fù)制圖片
}
func moreMenuAction() {
// 更多功能可以展示彈出框
}
}