gpt4 book ai didi

ios - 为 secureTextEntry 显示键盘时移动 View

转载 作者:行者123 更新时间:2023-11-28 07:08:54 25 4
gpt4 key购买 nike

当键盘出现时,我正在尝试向上移动我的 self.view。

我用的是普通的:

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil)

在我的 viewDidLoad() 中,就像我通常做的那样。有了这两个功能。

func keyboardWillShow(sender: NSNotification) {
self.view.frame.origin.y -= 160
}
func keyboardWillHide(sender: NSNotification) {
self.view.frame.origin.y += 160
}

不过这种特殊的看法。 UITextFields 有不同的键盘类型。

具体来说,这些文本字段是:

firstName - normal keyboard
lastName - normal keyboard
email - email keyboard
password - secureTextEntry

除了密码外,我的常用功能似乎对所有这些功能都能正常工作。不幸的是,当我在电子邮件 UITextField 上单击“下一步/返回”时。它使我的观点又提高了 160 分。

它显然认为我在添加另一个键盘,而不是移除一个。

我的第一个想法是简单地在调用特定的 UITextField 时更改值。但当我单击密码 UITextField 时, View 会按预期运行。

只有当我当前处于其他 View 之一时才会出现问题,然后单击下一步,或点击密码 UITextFIeld,所以我不能只指定 View 移动了多少,在textFieldShouldReturn 要么。

如何正确地向上移动 View ,同时考虑到 secureTextEntry 问题?

正如 Joko Sarmiento 所建议的,我也尝试了这个:

var originalFrame: CGRect!

override func viewDidLoad() {
originalFrame = self.view.frame
}

func textFieldShouldReturn(textField: UITextField) -> Bool {
self.view.frame = originalFrame
return false
}

我还在我的 touchesBegan 事件中添加了 self.view.frame = originalFrame,因为如前所述,它不仅在返回时。

但是上面的尝试没有成功,这是在电子邮件字段中单击下一步后密码字段的屏幕截图。在关闭文本字段后它也保持这种状态。

enter image description here

我还尝试使用 self.view.frame = originalframe.origin.y+160 将其向上移动。但是仍然会导致密码字段出现问题。

它搞砸的原因是我的 errorView,它改变了高度。使 originalFrame 现在不正确。

如有任何帮助,我们将不胜感激!

最佳答案

我很久以前就有过这种经历。当密码字段成为第一响应者时,您的 keyboardWillHide: 方法似乎没有被调用。

您可以在 textFieldShouldReturn: 中将 View 的原点重置为其原始值,而不是通过添加 160px,而是使用一个 originalValue 变量在 viewDidLoad 中设置。

你可以这样做:

var originalFrame: CGRect!

override func viewDidLoad() {
originalFrame = self.view.frame
}

func textFieldShouldReturn(textField: UITextField) -> Bool {
self.view.frame = originalFrame

return false
}

编辑 1:

我刚刚注意到上面的代码只有在您点击返回按钮时才会起作用。每当文本字段退出第一响应者时,您应该重置视​​图的框架。


编辑 2:

如果您在内容 View 中使用 UIScrollView,这个问题应该很容易解决。在 UIScrollView 中嵌入您的表单元素,每当应用触发 keyboardWillShow:keyboardWillHide: 时,您调整 contentInset 属性UIScrollView 基于键盘高度(您可以从通知的 userInfo 中获取)。

无论如何,由于您无需使用 UIScrollView 就解决了问题,这里解释了为什么您的方法不起作用以及如何让它起作用:

  1. 首先,您试图在内容 View 中减去/添加 160px 的固定高度。您必须了解不同设备的键盘高度不同。一个好的方法是使用从 NSNotification userInfo 获得的键盘高度。这可以通过 keyboardWillShow:keyboardWillHide: 中的 notification.userInfo 轻松检索。

  2. 您没有将 self.view 重置为其原始框架。这可能会导致帧的 Y 原点被修改多次而不被重置,导致减去的像素加倍等。由于您使用的是 self.view.frame.origin.y -= 160,如果当您切换到密码字段时 UIKeyboardWillShowNotification 通知没有触发,框架的原点将不会重置,并减去额外的 160px

  3. 每当您切换密码文本字段时,
  4. UIKeyboardWillHideNotification 可能不会一直触发。我仍然需要确认这一点,但这可能是你的 keyboardWillHide: 函数没有被调用的原因,因此减去额外的 160px 而不是添加 160px 然后减去 160px

关于ios - 为 secureTextEntry 显示键盘时移动 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29291917/

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