2015-10-05 3 views
1

Я пытаюсь получить клавиатуру notificaitons в классе KeyboardScrollController, но я получаю нераспознанный селектор для UIKeyboardWillHideNotification и UIKeyboardDidShowNotification.Непризнанный селектор на UIKeyboardWillHideNotification

Это моя простая реализация:

public class KeyboardScrollController 
{ 
    public func subscribeForKeyboardNotifications() 
    { 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWasShown:", name: UIKeyboardDidShowNotification, object: nil) 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil) 
    } 

    public func unsubscribeForKeyboardNotifications() 
    { 
     NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardDidShowNotification, object: nil); 
     NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: nil); 
    } 

    //MARK: Keyboard events 
    public func keyboardWasShown(notification: NSNotification) 
    { 

    } 

    public func keyboardWillHide(notification: NSNotification) 
    { 

    } 
} 

Но каждый раз, когда клавиатура должна быть представлена ​​она падает с этой ошибкой:

*** NSForwarding: warning: object 0x7fdc8d882730 of class 'KeyboardScrollController' does not implement methodSignatureForSelector: -- trouble ahead Unrecognized selector -[KeyboardScrollController keyboardWillHide:]

Я попытался с Selecor("keyboardWillHide:"), но это не делает любой разница.

Что здесь не так? Я реализовал это несколько раз в Objective-C, но я не могу заставить его работать в Swift.

ответ

1

Ах, это внезапно ударило меня, какова проблема. Я должен был унаследовать от NSObject, чтобы заставить его работать:

public class KeyboardScrollController : NSObject 
{ 
    public func subscribeForKeyboardNotifications() 
    { 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWasShown:", name: UIKeyboardDidShowNotification, object: nil) 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil) 
    } 

    public func unsubscribeForKeyboardNotifications() 
    { 
     NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardDidShowNotification, object: nil); 
     NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: nil); 
    } 

    //MARK: Keyboard events 
    public func keyboardWasShown(notification: NSNotification) 
    { 

    } 

    public func keyboardWillHide(notification: NSNotification) 
    { 

    } 
} 
Смежные вопросы