In solchen speziellen Fällen Sie erforderlich können Sie Ihre eigene Button Klasse Unter Klassierung UIButton und beobachten die schaffen Ereignisse in ihm. Später geben Sie dann die benutzerdefinierte Klasse UIButtons als Ihre eigene Schaltfläche an, die Sie erstellt haben.
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;
}
}
Ich hoffe, diese Macht hilft Ihnen, wenn es die folgen did't arbeiten die ein anderer Ansatz unter
erwähnt
eine Erweiterung schreiben für 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;
}
}
Und dann rufen Sie diese Funktion von Ihrem Viewcontroller
self.addKBOForButton(aButton: button)
IQKeyboardManager entlassen wird nicht die Tastatur, wenn Sie irgendwelche Aktionen durch die Kontrollen durchführen, die ** in den ** touchResignedGestureIgnoreClasses enthalten sind, so wie Sie Ihren UIButton –
@Jayachandra A enthalten sind, was ich dann tun sollte .. wenn ich überspringen UIbutton von dieser Eigenschaft, es wird nur die Tastatur das Ereignis nicht ausgelöst –