2017-09-14 1 views
1

ich diesen Code verwende in AppDelegateEntlassen Tastatur sowie Feuerknopf des touchupinside Ereignis IQKeyboardManager mit

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

Zuordnung touchResignedGestureIgnoreClasses Eigenschaft ist mir erlaubt, das UIButton Ereignis ausgelöst, wenn Tastatur geöffnet ist, aber es funktioniert nicht entlässt die Tastatur gleichzeitig.

+0

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 –

+0

@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 –

Antwort

0

Versuchen Sie diese Codezeile in Ihrer Funktion hinzuzufügen, die Schaltfläche Ereignis behandelt:

self.view.endEditing = true

+0

Ja kann ich das verwenden, aber dafür habe ich diese Zeile in jedem Controller hinzufügen. Aber ich möchte eine allgemeine Lösung. –

0

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


} 

Storyboard changes

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) 
+0

kann ich diese Funktionen in ViewController Erweiterung anstelle von uibutton Klasse deklarieren und es in Viewdidload aufrufen, so dass jeder Controller diese Funktionalität erbt? –

+0

es hat nicht funktioniert für mich –

+0

@PreetiRani ich bearbeite meine Antwort, bitte werfen Sie einen Blick –

Verwandte Themen