【问题标题】:How to move content of UIViewController upwards as Keypad appears using Swift当使用 Swift 出现键盘时如何向上移动 UIViewController 的内容
【发布时间】:2014-07-28 16:02:26
【问题描述】:
当键盘出现时,我想将 UIViewController 底部的内容向上移动。在视图控制器的底部,我有一个 UITextField,当用户单击它时,键盘会出现并阻止它,因此用户无法看到他们在 UITextField 中输入的内容。
我的 UITextField 声明如下:
@IBOutlet var startTime : UITextField
我需要一个 UIScrollView 来完成这个吗?或者有没有办法在键盘出现时向上移动页面的内容。
【问题讨论】:
标签:
cocoa-touch
keyboard
uitextfield
swift
nsnotificationcenter
【解决方案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?