我有一個奇怪的問題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,但沒有任何區別。
uj5u.com熱心網友回復:
我認為promlem在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 的框架為零,因為您正在創建一個新的文本欄位,并且您正在函式中設定對該文本欄位的約束
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/485210.html
標籤:IOS 迅速 uitextfield
