![](/img/trans.png)
[英]UIView returns to its initial frame after UITextField subview becomeFirstResponder
[英]becomeFirstResponder not called if UITextField is a subview
我对UITextField
有一个奇怪的问题:
class AnnotateTextField: UIView {
// MARK: - Views
let textField = UITextField()
// MARK: - Initializers
init() {
super.init(frame: .zero)
setupViews()
}
@available(*, unavailable)
private override init(frame: CGRect) {
fatalError("init(frame:) has not been implemented")
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - Setup
private func setupViews() {
let textField = UITextField()
textField.font = UIFont.systemFont(ofSize: 100.0)
textField.textColor = .white
backgroundColor = .black.withAlphaComponent(0.7)
clipsToBounds = true
layer.cornerRadius = 16.0
// Paint stays behind it
layer.zPosition = 1
addSubview(textField)
textField.snp.makeConstraints { make in
make.edges.equalToSuperview().inset(16.0)
}
}
}
如果我将此添加到我的视图并调用becomesFirstResponder
键盘将不会显示:
private func addText() {
let annotateTextField = AnnotateTextField()
addSubview(annotateTextField)
annotateTextField.snp.makeConstraints { make in
make.center.equalToSuperview()
}
annotateTextField.textField.becomeFirstResponder()
}
但是对于常规UITextField
它工作正常:
private func addText() {
let text = UITextField()
addSubview(text)
// This shows the keyboard
text.becomeFirstResponder()
}
我在这里做错了什么? 我尝试在AnnotateTextField
上启用用户交互,但并没有什么不同。
我认为问题在于setupViews
函数。 您正在该函数中创建一个新的文本字段对象,并在此文本字段上进行更改并将其添加到视图中。
要解决此问题,请在函数内删除新的 texfield 对象,例如:
private func setupViews() {
textField.font = UIFont.systemFont(ofSize: 100.0)
textField.textColor = .white
backgroundColor = .black.withAlphaComponent(0.7)
clipsToBounds = true
layer.cornerRadius = 16.0
// Paint stays behind it
layer.zPosition = 1
addSubview(textField)
textField.snp.makeConstraints { make in
make.edges.equalToSuperview().inset(16.0)
}
}
或将类中的文本字段对象与您在此函数中创建的对象相等,例如
private func setupViews() {
let textField = UITextField()
textField.font = UIFont.systemFont(ofSize: 100.0)
textField.textColor = .white
backgroundColor = .black.withAlphaComponent(0.7)
clipsToBounds = true
layer.cornerRadius = 16.0
// Paint stays behind it
layer.zPosition = 1
self.textField = textField // add this
addSubview(self.textField) // change this
textField.snp.makeConstraints { make in
make.edges.equalToSuperview().inset(16.0)
}
}
annotateTextField.textField 的框架为零,因为您正在创建一个新的文本字段,并且您正在函数中设置对该文本字段的约束
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.