Отключите все UIResponderStandardEditActions, когда поле UIText пусто - PullRequest
0 голосов
/ 20 ноября 2018

В настоящее время я пытаюсь предотвратить отображение всех UIResponderStandardEditActions, таких как copy, paste, delete, когда UITextfield пусто.Я хотел бы показать их, только если пользователь вводит сообщение.Я пробовал 2 решения и в настоящее время не работает, я не уверен, если это связано с iOS 12 или.Я пробовал overriding метод canPerformAction как в UITextfield extension, так и с использованием пользовательского класса, позже присвоенного UITextfield в Storyboard, но не повезло.Есть ли другой способ сделать это.Вот что я попробовал.

extension UITextField {
    open override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
            if self.text!.isEmpty {
                return false
            }

            return action == #selector(UIResponderStandardEditActions.paste(_:))
        }
}

class CustomTextField: UITextField {
    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        if action == #selector(UIResponderStandardEditActions.paste(_:)) || action == #selector(UIResponderStandardEditActions.copy(_:)) || action == #selector(UIResponderStandardEditActions.delete(_:)) {
            return false
        }
        return true
    }
}

1 Ответ

0 голосов
/ 20 ноября 2018

Просто переопределите свой подкласс и используйте этот класс вместо UITextField.Кстати, это отключит копирование-вставку, вырезание для целых условий, так что вам нужно добавить некоторые hasText: Bool или связанные условия в корпус переключателя.

@IBDesignable
class ActionsDisabledUITextField: UITextField {

    @IBInspectable var isPasteEnabled: Bool = false

    @IBInspectable var isSelectEnabled: Bool = false

    @IBInspectable var isSelectAllEnabled: Bool = false

    @IBInspectable var isCopyEnabled: Bool = false

    @IBInspectable var isCutEnabled: Bool = false

    @IBInspectable var isDeleteEnabled: Bool = false

    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        switch action {
        case #selector(UIResponderStandardEditActions.paste(_:)) where !isPasteEnabled,
             #selector(UIResponderStandardEditActions.select(_:)) where !isSelectEnabled,
             #selector(UIResponderStandardEditActions.selectAll(_:)) where !isSelectAllEnabled,
             #selector(UIResponderStandardEditActions.copy(_:)) where !isCopyEnabled,
             #selector(UIResponderStandardEditActions.cut(_:)) where !isCutEnabled,
             #selector(UIResponderStandardEditActions.delete(_:)) where !isDeleteEnabled:
            return false
        default:
            //return true : this is not correct
            return super.canPerformAction(action, withSender: sender)
        }
    }
}
...