当键盘出现时,我试图移动我的自我。
我使用了法线:
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
除密码外,我的常用功能似乎对所有这些功能都很好。不幸的是,当我点击" next / return"在我的电子邮件UITextField
上。它将我的观点提高了160点。
它显然认为我正在添加另一个键盘而不删除它。
我的第一个想法就是简单地在调用特定UITextField
时更改值。但是当我点击密码UITextField
时,视图就像它应该的那样。
当我目前处于其他一个视图中,然后点击下一个或点击密码UITextFIeld
时,它只会混乱,因此我无法指定视图移动的程度,在textFieldShouldReturn
中。
如何考虑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
,因为如前所述,它不仅仅是在返回时。
但上述尝试并不起作用,此处是从电子邮件字段中点击下一步后的密码字段的屏幕截图。在解雇文本字段后它也保持这种状态。
我也尝试用self.view.frame = originalframe.origin.y+160
代替它。但仍然会导致密码字段出现问题。
它混乱的原因是由于我的errorView改变了高度。这样originalFrame
现在不正确。
非常感谢任何帮助!
答案 0 :(得分:1)
我曾经历过一段时间。当密码字段成为第一响应者时,似乎没有调用您的keyboardWillHide:
方法。
您可以在textFieldShouldReturn:
中将视图的原点重置为原始值,而不是添加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:
如果您在内容视图中使用UIScrollView
,则应该可以轻松解决此问题。在UIScrollView
中嵌入表单元素,只要应用程序触发keyboardWillShow:
或keyboardWillHide:
,您就会根据键盘高度调整contentInset
属性UIScrollView
可以从通知的userInfo
)获得。
无论如何,既然您无需使用UIScrollView
即可解决问题,这里解释了为什么您的方法不起作用以及您可能如何使用它:
首先,您试图在内容视图中减去/添加固定高度160px
。您必须了解键盘高度在不同设备上有所不同。一个好的方法是使用从NSNotification
userInfo
获得的键盘高度。您可以通过notification.userInfo
或keyboardWillShow:
中的keyboardWillHide:
轻松获取此内容。
您没有将self.view
重置为原始框架。这可能会导致帧的Y原点被多次修改而不会被重置,从而导致减去的像素加倍等等。由于您使用的是self.view.frame.origin.y -= 160
,如果您UIKeyboardWillShowNotification
通知没有被触发切换到您的密码字段,框架的原点不会重置,并减去额外的160px
。
UIKeyboardWillHideNotification
可能无法一直触发。我仍然需要确认这一点,但这可能是您未调用keyboardWillHide:
函数的原因,因此减去额外的160px
而不是添加160px
然后减去160px