Swift文本字段 - 决定视图是否必须向上推

时间:2015-11-05 23:18:20

标签: ios swift

我在处理键盘时遇到问题。

整个视图都填充了文字字段。

当我使用通知移动视图时,上方文本框不再可见:

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
}

您是否有人知道如何区分选择哪个文本字段(在即将出现的键盘后面或键盘上方)来决定视图是否必须推高?

谢谢

3 个答案:

答案 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 对象,然后您可以读取标记属性值,以确定哪个文本字段成为第一响应者并从那里做出决策。