Лучший способ для пользователя взаимодействовать с текстовыми полями Swift 4 - PullRequest
0 голосов
/ 23 мая 2019

Поскольку я создавал некую форму, где пользователь сможет вводить информацию через текстовые поля.

Мне было интересно, есть ли простой способ сделать эту форму более интерактивной, сделав ее прокручиваемой.

Я знаю, что некоторые люди используют представления с прокруткой, но также является обычной практикой использование представлений коллекции или представлений таблиц и вставка текстовых полей в ячейки?Как?

Какой способ вы лично используете и как?

(Обратите внимание, что я делаю все это программно, без использования конструктора интерфейса)

Вот скриншот формы, которую я хочу построить:

Форма, которую я хочу построить

Спасибо

Ответы [ 3 ]

0 голосов
/ 23 мая 2019

IQKeyboardManager - лучшее, что я использую в своих проектах, я настоятельно рекомендую вам использовать простое и точное решение. IQKeyboardManager

0 голосов
/ 23 мая 2019

Вместо использования сторонних библиотек, попробуйте использовать уже предоставленные API по Apple.

Для этого может быть несколько решений,

  1. Используйте комбинацию UIScrollView и UIStackView. В этом случае вам нужно создать пользовательский интерфейс для всех полей формы вручную (даже если пользовательский интерфейс точно такой же)

  2. Используйте 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. Добавьте больше к нему согласно вашему требованию.

enter image description here

0 голосов
/ 23 мая 2019

Я настоятельно рекомендую использовать Eureka . Вы можете создавать формы Swift за считанные минуты.

enter image description here

Чтобы создать форму

  1. Import Eureka
  2. Создать новый UIViewController унаследованный от FormViewController
  3. ... Начать добавление строк в ViewDidLoad

    import Eureka
    
    class MyFormViewController: FormViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        form +++ Section("Section1")
            <<< TextRow(){ row in
                row.title = "Text Row"
                row.placeholder = "Enter text here"
            }
            <<< PhoneRow(){
                $0.title = "Phone Row"
                $0.placeholder = "And numbers here"
            }
        +++ Section("Section2")
            <<< DateRow(){
                $0.title = "Date Row"
                $0.value = Date(timeIntervalSinceReferenceDate: 0)
            }
    }
    }
    

Более подробную информацию вы можете найти на github.Также возможно создание пользовательских ячеек или переопределение стиля ячеек Eureka.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...