UIAlertController - 更改文本字段的大小并在它们之间添加 space

UIAlertController - change size of text fields and add space between them

我的警报是这样的:

是否可以使输入更大并在它们之间添加 space?这是我的代码片段。我尝试更改第二个文本字段的 frame 属性 但没有帮助:

let alert = UIAlertController(title: title, message: message, preferredStyle: .Alert)

// Add the textfields
alert.addTextFieldWithConfigurationHandler({ (textField) -> Void in
  textField.placeholder = "Vaše jméno"

})

alert.addTextFieldWithConfigurationHandler({ (textField) -> Void in
  textField.placeholder = "Společné heslo"

  var oldFrame = textField.frame
  oldFrame.origin.y = 40
  oldFrame.size.height = 60
  textField.frame = oldFrame
})

UIAlertController 视图旨在简单且不可自定义。如果你制作了自己的 presented view controller,那么这个 view 就属于你了,你可以做任何你想做的事情。

WARNING: only use this solution as a last resort! If you want to fine-tune the look of your alert controller, use a custom alert view. Take a look at this question for details.

作为 hacky 解决方案,您可以使用两者之间的第三个文本字段作为分隔符并将其禁用。此外,您可以使用 .

为其指定自定义高度

要避免让这个额外的文本字段成为焦点,请使用 UITextFieldDelegate 方法 textFieldShouldReturn(_:) 来让第二个文本字段成为焦点。

class AlertViewController: UITextFieldDelegate {
    [...]

    var firstTextField: UITextField!
    var secondTextField: UITextField!

    func setUpAlert() {
        [...]

        alert.addTextField { [weak self] textField in
            self?.firstTextField = textField
            textField.delegate = self
        }

        alert.addTextField { textField in
            textField.addConstraint(textField.heightAnchor.constraint(equalToConstant: 2))
            textField.isEnabled = false
        }

        alert.addTextField { [weak self] textField in
            self?.secondTextField = textField
        }

        [...]
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        if textField == firstTextField {
            secondTextField?.becomeFirstResponder()
        }

        return true
    }
}

结果:

不幸的是,您无法隐藏额外的文本字段,但至少可以给它一个背景:

textField.backgroundColor = .black

结果: