Мне нужно динамически создать представление стека с несколькими представлениями, поскольку число представлений известно только во время выполнения.
Каждое представление содержит UITextField
class AccountParameterView: UIView {
public var inputField = UITextField()
private struct InputFieldParam {
static let x: CGFloat = 0
static let y: CGFloat = 50
static let height: CGFloat = 20
}
override init(frame: CGRect){
super.init(frame: frame)
}
convenience init(frame: CGRect, with field: Field){
self.init(frame: frame)
self.field = field
loadElements()
}
required init?(coder aDecoder: NSCoder){
super.init(coder: aDecoder)
loadElements()
}
// Programmatically put the different element in the view
func loadElements() {
// shows the input field
inputField.frame = CGRect(x: InputFieldParam.x,
y: InputFieldParam.y,
width: frame.width,
height: InputFieldParam.height)
}
На мой взглядконтроллер Я создал stackView и добавил несколько AccountParameterView
:
func addStackView(){
for field in MyList!.fields{
if field.type != FieldType.list{
// position of the views
let viewFrame = CGRect(x: ViewConst.x,
y: view.frame.height - ViewConst.vertOffset,
width: view.frame.width,
height: ViewConst.height)
let myView = AccountParameterView(frame: viewFrame, with: field)
ParamViews.append(myView)
}
}
let stackView = getStackView()
for view in ParamViews {
stackView.addArrangedSubview(view)
}
self.view.addSubview(stackView)
}
Я вызываю эту функцию в моем viewDidLoad
.Все отображается на экране правильно, но невозможно сфокусироваться на любом из UITextField
s.Я пытался сделать контроллер представления делегатом каждого UITextField
, но ничего не изменилось, UITextField
остается недоступным