Создайте выпадающий селектор в iOS с помощью tableView, который показывает пользователю диапазон вариантов вместо использования UIPickerView по умолчанию.

Табличные представления в iOS очень эффективны и могут использоваться для решения самых разных задач. Они просты в управлении и легко настраиваются.

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

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

В этом руководстве предполагается, что вы знаете:

  • Быстрый
  • Xcode
  • Автоматический макет

Приступим.

1. Создайте пользовательский интерфейс в раскадровке.

Первое, что нам нужно сделать, это создать пользовательский интерфейс с помощью компонентов iOS и автоматического макета в раскадровке.

Здесь мы собираемся использовать UILabels, UITextFields, UITableView и UIButton.

1. Разработайте ViewController.

Добавьте UITableView под последним текстовым полем (текстовое поле опыта), установите для него ограничения и добавьте submitButton, который будет использоваться для хранения данных, введенных пользователем.

2. Создайте настраиваемую ячейку TableViewCell.

Теперь мы создаем настраиваемую ячейку TableViewCell, используя Cocoa Touch для присоединения к нашему TableView. Не забудьте установить флажок «Создать файл XIB», чтобы создать файл XIB. В этом файле мы будем создавать TableViewCell, вот описание

XIB расшифровывается как XML Interface Builder. Interface Builder - это программное приложение, которое позволяет разрабатывать графический пользовательский интерфейс с помощью какао и углерода.

2. Подключите пользовательский интерфейс к коду.

Мы должны соединить компоненты в раскадровке с ViewController. Затем мы расширяем наш ViewController, используя протоколыUITableViewDataSource and UITableViewDelegate, чтобы мы могли использовать tableView.

import UIKit
class HomeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    //outlets
    @IBOutlet var containerView: UIView!
    @IBOutlet var personImage: UIImageView!
    //textField outlets
    @IBOutlet var emailTextField: UITextField!
    @IBOutlet var passwordTextField: UITextField!
    @IBOutlet var nameTextField: UITextField!
    @IBOutlet var experienceTextField: UITextField!
    //tableView outlet
    @IBOutlet var experienceTableView: UITableView!
    //button outlets
    @IBOutlet var nextButton: UIButton!
    @IBOutlet var expandButton: UIButton!
    static let identifier = "HomeViewController"
    var experiences = ["Novice", "Intermediate", "Expert"]

Затем мы настраиваем UIComponents для нашего приложения, добавляя свойства. Нам также необходимо зарегистрировать класс Cocoa Touch, который мы создали выше, в нашем TableView.

override func viewDidLoad() {
    super.viewDidLoad()
    // for making the components circular
    self.personImage.clipsToBounds = true
    self.personImage.layer.cornerRadius = self.personImage.frame.height / 2.0
    self.nextButton.clipsToBounds = true
    self.nextButton.layer.cornerRadius = self.nextButton.frame.height / 2.0
    // for adding a border for the textFields
    self.nameTextField.layer.borderColor = UIColor(named: "primaryTextDark")?.cgColor
    self.nameTextField.layer.borderWidth = 0.8
    self.nameTextField.layer.cornerRadius = 6.0
    self.emailTextField.layer.borderColor = UIColor(named: "primaryTextDark")?.cgColor
    self.emailTextField.layer.borderWidth = 0.8
    self.emailTextField.layer.cornerRadius = 6.0
    self.passwordTextField.isSecureTextEntry = true
    self.passwordTextField.layer.borderColor = UIColor(named: "primaryTextDark")?.cgColor
    self.passwordTextField.layer.borderWidth = 0.8
    self.passwordTextField.layer.cornerRadius = 6.0
    self.experienceTextField.layer.borderColor = UIColor(named: "primaryTextDark")?.cgColor
    self.experienceTextField.layer.borderWidth = 0.8
    self.experienceTextField.layer.cornerRadius = 6.0
    // specifying the delegate and dataSource of the tableView
    self.experienceTableView.delegate = self
    self.experienceTableView.dataSource = self
    // registering the custom cocoa touch table view cell
    self.experienceTableView.register(UINib(nibName: "ExperienceTableViewCell", bundle: nil), forCellReuseIdentifier: ExperienceTableViewCell.identifier)
    // adding a shadow for the tableView so that it looks like a drop down
    self.experienceTableView.layer.masksToBounds = false
    self.experienceTableView.layer.shadowOffset = CGSize(width: 0, height: 2)
    self.experienceTableView.layer.shadowColor = UIColor.black.cgColor
    self.experienceTableView.layer.shadowOpacity = 0.5
    self.experienceTableView.layer.shadowRadius = 1
    // hiding the tableView initially
    self.experienceTableView.isHidden = true
}

Наконец, мы пишем код для методов протокола tableView и кнопки расширения.

// setting the number of rows for the tableView
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return experiences.count
}
// setting the height for the rows for the tableView
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 40.0
}
// setting the cell for the tableView
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if let cell = tableView.dequeueReusableCell(withIdentifier: ExperienceTableViewCell.identifier, for: indexPath) as? ExperienceTableViewCell {
        cell.experienceText = experiences[indexPath.row]
        return cell
    }
fatalError()
}
// updating the textField on the selection of the cell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.experienceTextField.text = experiences[indexPath.row]
}
// toggling the visibility of the tableView
@IBAction func expandButtonPressed(_ sender: Any) {
    UIView.animate(withDuration: 0.1) {
        self.experienceTableView.isHidden = !self.experienceTableView.isHidden
        self.expandButton.transform =
self.expandButton.transform.rotated(by: +CGFloat.pi + 0.00000001)
    }
 }
}

Заключение

Во-первых, мы разработали пользовательский интерфейс, добавив UILabels, UIButtons, UITextFields, UITableView и UIButton с помощью Auto Layout.

Затем мы создали собственный класс Cocoa Touch для использования его с tableView и разработали пользовательский интерфейс в файле XIB.

Наконец, после подключения выходов пользовательского интерфейса к ViewController мы зарегистрировали ячейку и написали код для скрытия и отображения TableView при нажатии кнопки раскрывающегося списка.

Мы подошли к концу этой статьи, я надеюсь, что она была полезной, и вы кое-что узнали!

Спасибо за чтение!