Swift - 键盘打开时加载联系页面

时间:2017-07-13 13:53:30

标签: ios swift

我正在简单地联系我们表格,其中包含姓名,电子邮件地址和消息。我的viewDidLoad中的以下代码是Name文本字段的片段。当我打开联系表格时,我希望键盘在这个字段上打开。

override func viewDidLoad() {
    view.backgroundColor = UIColor.darkGray
    let fullNameInput = UITextField()
    fullNameInput.frame = CGRect(x: 15, y: 15, width: self.view.frame.width - 2 * margin, height: 50)
    fullNameInput.placeholder = "Your Name"
    let fullNameString = "Your Name"
    let fullNamePlaceholder = NSMutableAttributedString(string: fullNameString)
    let fullNameRange = (fullNameString as NSString).range(of: fullNameString)
    fullNamePlaceholder.addAttribute(NSForegroundColorAttributeName, value: UIColor.white, range: fullNameRange)
    fullNameInput.attributedPlaceholder = fullNamePlaceholder
    fullNameInput.backgroundColor = .black
    fullNameInput.delegate = self
    fullNameInput.layer.cornerRadius = 5.0
    fullNameInput.layer.borderWidth = 2.0
    fullNameInput.layer.borderColor = UIColor.black.cgColor

    fullNameInput.becomeFirstResponder()
    self.view.addSubview(fullNameInput)
}

在浏览解决方案时我相信

fullNameInput.becomeFirstResponder()

是我希望实现此目的的代码行。但是,它没有这样做。我在这里错过了什么吗?

其他问题

在此之后,我还会为打开键盘上方的区域制作一个滚动视图。

我怎样才能获得键盘的框架?

我正在使用Swift 3.0和iOS 9.2

3 个答案:

答案 0 :(得分:2)

来自becomeFirstResponder()上的documentation

  

永远不要在不属于活动视图的视图上调用此方法   层次结构。

所以从viewDidLoad调用它肯定不是一个好主意。试试viewDidAppear

答案 1 :(得分:2)

您必须从 viewDidAppear

调用此方法
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    fullNameInput.becomeFirstResponder()
}

答案 2 :(得分:0)

fullNameInput被包含在视图中之前,您正在成为第一响应者。

首先将其添加为子视图,然后将其称为第一响应者,它将起作用。

我会这样做,因为mag_zbc说。使用ViewDidAppear

上的第一响应者