[英]Moving view when keyboard shows for secureTextEntry
當鍵盤出現時,我正在嘗試將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()
,就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
時,該視圖便按照預期的方式運行。
僅當我當前處於其他視圖之一中,然后單擊“下一步”或點擊密碼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
框架現在不正確。
任何幫助將不勝感激!
我前陣子經歷過。 密碼字段成為第一響應者時,似乎沒有調用您的keyboardWillHide:
方法。
您可以在textFieldShouldReturn:
中將視圖的原點重置為其原始值,而不是通過添加160px
,而是具有在viewDidLoad
設置的originalValue
變量。
您可以執行以下操作:
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:
,您都可以根據鍵盤高度(可以從通知的userInfo
)調整UIScrollView
的contentInset
屬性。
無論如何,由於您無需使用UIScrollView
即可解決了問題,因此以下說明了您的方法為何行不通以及您如何使它行得通:
首先,您嘗試為內容視圖減去/增加固定高度160px
。 您必須了解不同設備上的鍵盤高度不同。 一個好的方法是使用從NSNotification
userInfo
獲得的鍵盤高度。 可通過您的keyboardWillShow:
或keyboardWillHide:
notification.userInfo
輕松檢索到此信息。
您沒有將self.view
重置為其原始框架。 這可能會導致幀的Y原點被修改多次而不重置,導致減去的像素增加一倍, UIKeyboardWillShowNotification
。由於您使用的是UIKeyboardWillShowNotification
self.view.frame.origin.y -= 160
,如果UIKeyboardWillShowNotification
通知沒有當您切換到密碼字段時觸發,該幀的原點不會重置,並且會減去160px
。
每當您切換密碼文本字段時, UIKeyboardWillHideNotification
可能不會一直觸發。 我仍然需要確認這一點,但這可能是未調用keyboardWillHide:
函數的原因,因此減去了另外的160px
而不是加上160px
然后減去160px
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.