【问题标题】:Display copy after select text from textview using swift使用swift从textview中选择文本后显示副本
【发布时间】:2018-03-11 23:48:38
【问题描述】:
使用此代码,它会告诉我:复制、选择、全选和粘贴。
但是我想先全选,当用户点击选择然后复制将显示,当点击复制然后粘贴将显示。
class CustomTextField: UITextView
{
override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool
{
if action == #selector(select(_:)) || action == #selector(copy(_:)) || action == #selector(selectAll(_:)) || action == #selector(paste(_:))
{
return true
}
return false
}
}
【问题讨论】:
标签:
ios
swift
uitextview
uimenucontroller
【解决方案1】:
你需要这样的东西,它只是状态的问题,如果你的 currentState 是一个你应该在菜单中显示的东西,你还需要覆盖这些方法中的每一个来改变当前状态
import UIKit
enum MenuState{
case select
case copy
case paste
}
class CustomTextField: UITextField {
var currentState : MenuState = .select
override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool
{
switch self.currentState {
case .select:
if action == #selector(select(_:)) || action == #selector(selectAll(_:)){
return true
}
case .copy:
if action == #selector(copy(_:)){
return true
}
case .paste:
if action == #selector(paste(_:)){
return true
}
}
return false
}
override func select(_ sender: Any?) {
super.select(sender)
self.currentState = .copy
}
override func selectAll(_ sender: Any?) {
super.selectAll(sender)
self.currentState = .copy
}
override func copy(_ sender: Any?) {
super.copy(sender)
self.currentState = .paste
}
override func paste(_ sender: Any?) {
super.paste(sender)
self.currentState = .select
}
}