代码之家  ›  专栏  ›  技术社区  ›  Mili Shah

使用swift从文本视图中选择文本后显示副本

  •  1
  • Mili Shah  · 技术社区  · 8 年前

    enter image description here

    使用此代码,它将显示:复制、选择、全选和粘贴。

    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
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Reinier Melian    8 年前

    你需要这样的东西,它只是状态的问题,如果你的当前状态是一个,你应该在菜单中显示一些东西,你还需要覆盖这些方法中的每一个来改变当前状态

    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
        }
    
    }