我有一个scrollView,当我显示键盘时,我想向上滚动.
键盘显示时我有这个错误的崩溃:
2014-09-29 14:48:50.738 swrd [1563:472888] – [swrd.EditPhotoViewController keyboardWasShown]:无法识别的选择器发送到实例0x14ed36640
这是我的代码,怎么了?
func registerForKeyboardNotifications ()-> Void {
NSNotificationCenter.defaultCenter().addobserver(self,selector: "keyboardWasShown",name: UIKeyboardDidShowNotification,object: nil)
NSNotificationCenter.defaultCenter().addobserver(self,selector: "keyboardWillBeHidden",name: UIKeyboardWillHideNotification,object: nil)
}
func deregisterFromKeyboardNotifications () -> Void {
let center: NSNotificationCenter = NSNotificationCenter.defaultCenter()
center.removeObserver(self,name: UIKeyboardDidHideNotification,object: nil)
center.removeObserver(self,object: nil)
}
func keyboardWasShown (notification: NSNotification) {
let info : NSDictionary = notification.userInfo!
let keyboardSize = info.objectForKey(UIKeyboardFrameBeginUserInfoKey)?.frame
let insets: UIEdgeInsets = UIEdgeInsetsMake(self.scrollView.contentInset.top,keyboardSize!.height,0)
self.scrollView.contentInset = insets
self.scrollView.scrollIndicatorInsets = insets
self.scrollView.contentOffset = CGPointMake(self.scrollView.contentOffset.x,self.scrollView.contentOffset.y + keyboardSize!.height)
}
func keyboardWillBeHidden (notification: NSNotification) {
let info : NSDictionary = notification.userInfo!
let keyboardSize = info.objectForKey(UIKeyboardFrameBeginUserInfoKey)?.frame
let insets: UIEdgeInsets = UIEdgeInsetsMake(self.scrollView.contentInset.top,0)
self.scrollView.contentInset = insets
self.scrollView.scrollIndicatorInsets = insets
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
self.registerForKeyboardNotifications()
}
override func viewWilldisappear(animated: Bool) {
super.viewWilldisappear(true)
self.deregisterFromKeyboardNotifications()
}
解决方法
在你的代码中,keyboardWasShown和keyboardWasHidden都有一个参数,即NSNotification.您需要使用冒号在addobserver中终止您的选择器,以便它被传递.即,键盘WasShown和keyboardWasShown:是不同的选择器.
NSNotificationCenter.defaultCenter().addobserver(self,selector: "keyboardWasShown:",object: nil)