xcode6 swift NSObject AnyObject错误
发布时间:2020-12-14 17:32:41 所属栏目:百科 来源:网络整理
导读:我已经使用了 How to move content of UIViewController upwards as Keypad appears using Swift中的代码来阻止键盘覆盖我的视图. 不知怎的,我无法让它工作(主要是因为我的n00b编程“技能”) 这是我得到的错误:[NSObject:AnyObject]在这行代码中没有名为’
我已经使用了
How to move content of UIViewController upwards as Keypad appears using Swift中的代码来阻止键盘覆盖我的视图.
不知怎的,我无法让它工作(主要是因为我的n00b编程“技能”) 我想我必须创建某种类型的IBAction,但我尝试的任何工作都没有.我需要做些什么来使代码工作?为什么我必须这样做? NSObject做什么? 这是代码: override func viewDidLoad() { super.viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self,selector: Selector("keyboardWillShow:"),name:UIKeyboardWillShowNotification,object: nil); NSNotificationCenter.defaultCenter().addObserver(self,selector: Selector("keyboardWillHide:"),name:UIKeyboardWillHideNotification,object: nil); } deinit { NSNotificationCenter.defaultCenter().removeObserver(self); } func keyboardWillShow(sender: NSNotification) { let s:NSValue = sender.userInfo.valueForKey(UIKeyboardFrameEndUserInfoKey) as NSValue; let rect :CGRect = s.CGRectValue(); var frame = self.textField.frame; frame.origin.y = frame.origin.y - rect.height; self.textField.frame = frame; } func keyboardWillHide(sender: NSNotification) { let s:NSValue = sender.userInfo.valueForKey(UIKeyboardFrameBeginUserInfoKey) as NSValue; let rect :CGRect = s.CGRectValue(); var frame = self.textField.frame; frame.origin.y = frame.origin.y + rect.height; self.textField.frame = frame; } 解决方法
您必须将userInfo强制转换为NSDictionary
将以上功能替换为以下功能 func keyboardWillShow(sender: NSNotification) { let dict:NSDictionary = sender.userInfo as NSDictionary let s:NSValue = dict.valueForKey(UIKeyboardFrameEndUserInfoKey) as NSValue; let rect :CGRect = s.CGRectValue(); var frame = self.textField.frame; frame.origin.y = frame.origin.y - rect.height; self.textField.frame = frame; } func keyboardWillHide(sender: NSNotification) { let dict:NSDictionary = sender.userInfo as NSDictionary let s:NSValue = dict.valueForKey(UIKeyboardFrameBeginUserInfoKey) as NSValue; let rect :CGRect = s.CGRectValue(); var frame = self.textField.frame; frame.origin.y = frame.origin.y + rect.height; self.textField.frame = frame; } 编辑 //Add this above viewDidLoad var selecteTextFieldOriginalY:CGFloat = 0.0; //write in viewDidLoad override func viewDidLoad() { super.viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self,name:UIKeyboardDidShowNotification,object: nil); NSNotificationCenter.defaultCenter().addObserver(self,name:UIKeyboardDidHideNotification,object: nil); } //Replace these functions func keyboardWillShow(sender: NSNotification) { let dict:NSDictionary = sender.userInfo as NSDictionary let s:NSValue = dict.valueForKey(UIKeyboardFrameEndUserInfoKey) as NSValue; let rect :CGRect = s.CGRectValue(); var frame = self.textField.frame; selecteTextFieldOriginalY = frame.origin.y; //Adjust 80 according to your need actually if is for padding and quickTypeView var offset = (rect.height - ((self.view.frame.height - self.textField.frame.origin.y)+self.textField.frame.size.height))+80; print(offset) frame.origin.y = offset>0 ? frame.origin.y - offset : frame.origin.y ; UIView.animateWithDuration(0.3,animations:{ self.textField.frame = frame; } ) } func keyboardWillHide(sender: NSNotification) { let dict:NSDictionary = sender.userInfo as NSDictionary let s:NSValue = dict.valueForKey(UIKeyboardFrameBeginUserInfoKey) as NSValue; let rect :CGRect = s.CGRectValue(); var frame = self.textField.frame; frame.origin.y = selecteTextFieldOriginalY ; UIView.animateWithDuration(0.3,animations:{ self.textField.frame = frame; }) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容