2016-09-23 105 views
4

我的問題是非常專門針對iOS 10和Swift 3,因爲ive嘗試了多種解決方案,但這些問題並未解決,原因是swift 3.我也試過轉換代碼並啓用遺留代碼。所有這些都不起作用。Swift 3 - iOS 10 - UITextField - 如何自動隱藏鍵盤和自動移動文本字段

如果您可以發佈代碼和簡單步驟來自動移動文本字段然後輸入文本,並點擊返回鍵,文本字段應該返回到原來的位置並且鍵盤消失,我將非常感激。

謝謝

回答

7

此示例適用於斯威夫特3:

延長UITextFieldDelegate

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
     self.nicknameLabel.resignFirstResponder() 
     return true 
    } 

viewDidLoad中:

override func viewDidLoad() { 
     super.viewDidLoad() 
     nicknameLabel.delegate = self 
    } 

這裏有一些對於斯威夫特3工作的提示: https://medium.com/@KaushElsewhere/how-to-dismiss-keyboard-in-a-view-controller-of-ios-3b1bfe973ad1#.2fw5cflmp

+1

感謝分享此。它適用於解決鍵盤與您的解決方案,如果文本字段是在頁面底部怎麼樣。如何將文本字段向上移動,使鍵盤不會隱藏它。 – Umair

2

首先將UITextField放在滾動視圖中。

然後這個小的擴展:

extension UIScrollView { 

/// listen to keyboard event 
func makeAwareOfKeyboard() { 
    NotificationCenter.default.addObserver(self, selector: #selector(self.keyBoardDidShow), name: NSNotification.Name.UIKeyboardDidShow, object: nil) 


    NotificationCenter.default.addObserver(self, selector: #selector(self.keyBoardDidHide), name: NSNotification.Name.UIKeyboardDidHide, object: nil) 
} 

/// move scroll view up 
func keyBoardDidShow(notification: Notification) { 
    let info = notification.userInfo as NSDictionary? 
    let rectValue = info![UIKeyboardFrameBeginUserInfoKey] as! NSValue 
    let kbSize = rectValue.cgRectValue.size 

    let contentInsets = UIEdgeInsetsMake(0, 0, kbSize.height, 0) 
    self.contentInset = contentInsets 
    self.scrollIndicatorInsets = contentInsets 

} 

/// move scrollview back down 
func keyBoardDidHide(notification: Notification) { 
    // restore content inset to 0 
    let contentInsets = UIEdgeInsetsMake(0, 0, 0, 0) 
    self.contentInset = contentInsets 
    self.scrollIndicatiorInsets = contentInsets 
} 
} 

然後作出這樣的滾動視圖瞭解鍵盤的

override func viewDidLoad() { 
    super.viewDidLoad() 
    ... 
    scrollView.makeAwareOfKeyboard() 
    ... 
}