2017-07-13 41 views
1

我正在制作一个简单的联系我们表单,其中包含姓名,电子邮件地址和消息。我的viewDidLoad中的以下代码是名称文本字段的一个片段。当我打开联系表单时,我希望键盘在此字段中打开。Swift - 用键盘打开负载联系页面打开

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() 

是的代码,我想做到这一点就行了。但是,它并没有这样做。我在这里错过了什么吗?

其他问题

在此之后我也会使一个滚动视图上面开放的键盘区域。

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

我使用雨燕3.0和iOS 9.2

+0

首先是调用此方法,调用'super.viewDidLoad()'当u是在你的VC覆盖任何生命周期功能。 – dirtydanee

+0

你用什么操作系统版本?什么Swift版本?在iOS 10.3上运行的Swift 3.0上将代码粘贴到我的示例项目上,Simulator将打开键盘。 – dirtydanee

+0

Swift 3.0和iOS 9.2。我已将此信息添加到我的问题中,谢谢。我也接受了一个解决方案。 – ochhii

回答

1

你必须从viewDidAppear

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    fullNameInput.becomeFirstResponder() 
} 
+0

你应该在调用super时使用'animated'属性,而不是硬编码'true'。 – dirtydanee

1

documentationbecomeFirstResponder()

决不呼吁一种观点认为,不是活动视图 层次的一部分这一方法。

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

0

您正在使fullNameInput成为第一响应者之前,它被纳入视图。

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

我会照mag_zbc说的去做。使用成为第一个响应的ViewDidAppear