![](/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.