2016-09-23 99 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() 
    ... 
}