Вместо использования сторонних библиотек, попробуйте использовать уже предоставленные API по Apple
.
Для этого может быть несколько решений,
Используйте комбинацию UIScrollView
и UIStackView
. В этом случае вам нужно создать пользовательский интерфейс для всех полей формы вручную (даже если пользовательский интерфейс точно такой же)
Используйте UITableView
, чтобы создать столько полей, сколько вы хотите с помощью одного пользовательского интерфейса.
Форма, которую вы пытаетесь создать, содержит 3 поля с одинаковым пользовательским интерфейсом - отличается только текст.
Поскольку UITableView
работает по концепции reusability
и наша форма содержит контент того же типа, мы определенно можем использовать UITableView
. Даже если форма содержит и другие типы контента, в этом случае также tableView
является хорошим выбором.
1. Прежде всего создайте enum - FormField
, который будет представлять тип отдельного поля в форме.
enum FormField {
case websiteName
case websiteLink
case password
var title: String? {
var str: String?
switch self {
case .websiteName:
str = "Website's name"
case .websiteLink:
str = "Link"
case .password:
str = "Password"
}
return str
}
var placeholder: String? {
var str: String?
switch self {
case .websiteName:
str = "ex: \"Facebook\""
case .websiteLink:
str = "ex: \"www.facebook.com\""
case .password:
str = "current password"
}
return str
}
}
Мы будем использовать это enum
для заполнения нашего пользовательского UITableViewCell. Вы можете добавить больше типов полей согласно вашему требованию.
2. Создать кастом UITableViewCell
class CustomCell: UITableViewCell {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var textField: UITextField!
func configure(with field: FormField) {
self.label.text = field.title
self.textField.placeholder = field.placeholder
}
}
3. Соответствует ViewController
UITableViewDataSource
и реализует методы
class ViewController: UIViewController, UITableViewDataSource {
let formFields: [FormField] = [.websiteName, .websiteLink, .password]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.formFields.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomCell
cell.configure(with: self.formFields[indexPath.row])
return cell
}
}
В приведенном выше коде мы создали массив formFields
, который мы будем использовать как dataSource
до tableView
. Добавьте больше к нему согласно вашему требованию.