当使用 Swift 出现键盘时如何向上移动 UIViewController 的内容

Posted

技术标签:

【中文标题】当使用 Swift 出现键盘时如何向上移动 UIViewController 的内容【英文标题】:How to move content of UIViewController upwards as Keypad appears using Swift 【发布时间】:2014-07-28 16:02:26 【问题描述】:

当键盘出现时,我想将 UIViewController 底部的内容向上移动。在视图控制器的底部,我有一个 UITextField,当用户单击它时,键盘会出现并阻止它,因此用户无法看到他们在 UITextField 中输入的内容。

我的 UITextField 声明如下:

@IBOutlet var startTime : UITextField

我需要一个 UIScrollView 来完成这个吗?或者有没有办法在键盘出现时向上移动页面的内容。

【问题讨论】:

【参考方案1】:

有很多方法可以做到这一点,但你总是需要听键盘相关的通知来做到这一点。它们的工作方式与 obj-c 相同。以下简化示例显示了如何在键盘出现时将文本字段向上移动,并在键盘消失时将其向下移动。下面的例子是 UIViewController 的一个实现。

override func viewDidLoad() 
    super.viewDidLoad()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil);
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil);


deinit 
    NSNotificationCenter.defaultCenter().removeObserver(self);


func keyboardWillShow(sender: NSNotification) 
    let s:NSValue = sender.userInfo.valueForKey(UIKeyboardFrameEndUserInfoKey) as NSValue;
    let rect :CGRect = s.CGRectValue();
    var frame = self.textField.frame;
    frame.origin.y = frame.origin.y - rect.height;
    self.textField.frame = frame;


func keyboardWillHide(sender: NSNotification) 
    let s:NSValue = sender.userInfo.valueForKey(UIKeyboardFrameBeginUserInfoKey) as NSValue;
    let rect :CGRect = s.CGRectValue();
    var frame = self.textField.frame;
    frame.origin.y = frame.origin.y + rect.height;
    self.textField.frame = frame;

【讨论】:

【参考方案2】:

我不确定评分最高的答案是如何工作的;不应该是:

func keyboardWillShow(notification: NSNotification) 
    if let info: NSDictionary = notification.userInfo 
        let value: NSValue = info.valueForKey(UIKeyboardFrameEndUserInfoKey) as NSValue
        let rect: CGRect = value.CGRectValue()
        view_comment.y = rect.height - view_comment.h
    

因为您需要将 Dictionary 转换为 NSDictionary 才能访问 valueForkey?

【讨论】:

以上是关于当使用 Swift 出现键盘时如何向上移动 UIViewController 的内容的主要内容,如果未能解决你的问题,请参考以下文章

当键盘出现在 Swift 中时 UITextField 向上移动

Swift 防止 TabBar 在键盘处于活动状态时向上移动

当用户单击 UIWebView 内的文本字段时,出现键盘后屏幕不会向上移动

当键盘出现时 CollectionView 向上移动然后返回到之前的位置

当键盘出现在swift中时滚动UITextView

当键盘出现并启用滚动时,TextField 向上移动