我在处理键盘时遇到问题。
整个视图都填充了文字字段。
当我使用通知移动视图时,上方文本框不再可见:
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)
}
func keyboardWillShow(sender: NSNotification) {
self.view.frame.origin.y -= 150
}
func keyboardWillHide(sender: NSNotification) {
self.view.frame.origin.y += 150
}
您是否有人知道如何区分选择哪个文本字段(在即将出现的键盘后面或键盘上方)来决定视图是否必须推高?
谢谢
答案 0 :(得分:3)
您很可能希望滚动视图中的文本字段,然后您应该更改视图框高度,而不是原点。更改框架后,您可以滚动视图内容以确保所需的部件可见。
答案 1 :(得分:2)
您不应该上下移动父视图。通过将所有文本字段放在滚动视图中,执行此操作而不是使用通知的最佳方法是。稍后在视图控制器类中,您可以使用文本字段委托方法
- (void)textFieldDidBeginEditing:(UITextField *)textField
在此方法中,设置scrollview contentOffset属性,如此
scrollView.contentOffset = CGPointMake(0, textField.center.y-80); // you can change 80 to whatever which fits your needs
稍后当文本字段重新占用第一个响应者时,在文本字段外部点击时,您需要设置scrollview的偏移值。您可以使用此文本字段委托方法来设置回滚动视图偏移
- (void)textFieldDidEndEditing:(UITextField *)textField{
scrollView.contentOffset = CGPointMake(0,-80);
}
注意:您需要使视图中的每个文本字段都将其委托作为UIViewController实例。您还需要您的UiViewController采用UITextFieldDelegate
答案 2 :(得分:1)
我知道无法知道使用通知选择了哪个 UITextField 。
为此,我建议为每个 UITextField 分配一个唯一的标记值,并为每个 UIViewController <分配委托属性 UIViewController < / strong>实例。
让视图控制器采用 UITextFieldDelegate 协议并实现textFieldShouldBeginEditing(_:)
所有UITextFieldDelegate Protocol方法都会收到 UITextField 对象,然后您可以读取标记属性值,以确定哪个文本字段成为第一响应者并从那里做出决策。