2

我在 appdelegate 中使用此代码

IQKeyboardManager.sharedManager().enable = true
IQKeyboardManager.sharedManager().shouldResignOnTouchOutside = true
IQKeyboardManager.sharedManager().touchResignedGestureIgnoreClasses = [UINavigationBar.self,UIControl.self]

分配touchResignedGestureIgnoreClasses属性允许我在键盘打开但不会同时关闭键盘的情况下触发 UIButton 事件。

4

2 回答 2

1

尝试在处理按钮事件的函数中添加这行代码:

self.view.endEditing = true

于 2017-09-14T11:06:20.170 回答
0

在这种特定情况下,您可能需要创建自己的按钮类子类UIButton并观察其中的事件。然后将 UIButtons 自定义类指定为您自己创建的按钮。

class KOButton: UIButton {

    var isKeyBoardOpened = false

    // Only override draw() if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func draw(_ rect: CGRect) {
        // Drawing code

        self.addObserver(self, forKeyPath: "highlighted", options: .new, context: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardOpened), name: Notification.Name.UIKeyboardDidShow, object: nil)
    }

    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if keyPath == "highlighted" {
            UIApplication.shared.keyWindow?.endEditing(true)
            self.isKeyBoardOpened = false
        }
    }

    func keyboardOpened() {
        isKeyBoardOpened = true;
    }


}

故事板更改

我希望这可能对您有所帮助,如果它不起作用,请遵循下面提到的另一种方法

为UIViewController写一个扩展

// Declare a global var to produce a unique address as the assoc object handle
private var AssociatedObjectHandle: UInt8 = 0
extension UIViewController{

    var isKeyBoardOpened: Bool {
        get {
            return objc_getAssociatedObject(self, &AssociatedObjectHandle) as! Bool
        }
        set {
            objc_setAssociatedObject(self, &AssociatedObjectHandle, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }


    func addKBOforButton(aButton: UIButton) {
        aButton.addObserver(self, forKeyPath: "highlighted", options: .new, context: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardOpened), name: Notification.Name.UIKeyboardDidShow, object: nil)
    }

    override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if keyPath == "highlighted" {
            UIApplication.shared.keyWindow?.endEditing(true)
            self.isKeyBoardOpened = false
        }
    }

    func keyboardOpened() {
        isKeyBoardOpened = true;
    }
}

然后从您的视图控制器调用此函数

self.addKBOForButton(aButton: button)
于 2017-09-14T11:32:34.870 回答