gpt4 book ai didi

swift - 查看在特定文本字段委托(delegate)中向上移动

转载 作者:行者123 更新时间:2023-11-30 12:14:32 26 4
gpt4 key购买 nike

我必须使用标记将 Swift 3.0 中最后一个 UITextField 中的 UIView 移动到下面提到的委托(delegate)方法上,

func textFieldDidBeginEditing(_ textField: UITextField) {
if (textField.tag == 4){
//UIView Up
}
}

func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
if (textField.tag == 4){
//UIView Down
}
return true
}

我尝试了很多代码,但没有一个像通知等那样工作。

最佳答案

您需要将Observers添加到NotificationCenter中,以便在键盘向上向上向下时监听(我假设您的 textfield 导出是 lastTextField 以使此示例正常工作,但这显然必须适应您为其提供的任何名称)

IBOutlet weak var passwordTextField: UITextField!

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: .UIKeyboardWillHide, object: nil)

(上面的代码可以添加在viewDidLoad()中)

然后添加在这些通知到达时要执行的方法,如下所示:

func keyboardWillShow(_ notification:Notification) {
if view.frame.origin.y >= 0 && lastTextField.isFirstResponder {
view.frame.origin.y -= getKeyboardHeight(notification)
}
}

func keyboardWillHide(_ notification:Notification) {
if view.frame.origin.y < 0 {
view.frame.origin.y += getKeyboardHeight(notification)
}
}

这些方法中的验证可以防止双重执行,例如在文本字段之间移动时向上/向下移动两次,而无需放弃第一响应者,这在像您这样的情况下很常见(我假设您这样做是为了一个表单,因此需要澄清您只需要第四个文本字段)。请注意,我仅在 keyboardWillShow 方法中对指定的文本字段(及其导出 lastTextField)进行验证,以防您在显示键盘时移动另一个文本字段并退出响应者,在这种情况下,即使它不是您开始的原始位置,当键盘隐藏时, View 也会返回到其原始位置。

您还需要一种获取键盘高度的方法,这个可以帮助您:

func getKeyboardHeight(_ notification:Notification) -> CGFloat {
let userInfo = notification.userInfo
let keyboardSize = userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue // of CGRect
return keyboardSize.cgRectValue.height
}

让我知道进展如何,但我刚刚在我的应用程序上测试了相同的代码,它可以工作,所以你应该没问题。

PS:请密切注意 Storyboard(如果您正在使用它)以及文本字段委托(delegate)是否已正确设置。

关于swift - 查看在特定文本字段委托(delegate)中向上移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45595172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com