Есть ли способ получить значение из текстового поля в ячейке табличного представления, чтобы использовать его в другой ячейке табличного представления? - PullRequest
1 голос
/ 24 апреля 2019

Я создаю приложение электронной коммерции для iOS, которое продает обувную продукцию. Этот вопрос касается экрана оформления заказа, который представляет собой UITableViewController для сбора платежной информации пользователя и ее сохранения в Firebase.

Ниже UITableViewController содержит две пользовательские ячейки UITableView. Первая ячейка содержит несколько текстовых полей для получения платежной информации (электронная почта, номер карты, срок действия и CVC) от пользователя, а вторая ячейка ниже содержит кнопку отправки для сохранения их в Firebase.

Мое требование - получить платежную информацию от пользователя и сохранить ее в Firebase при нажатии кнопки «Отправить». (Текстовые поля и кнопка отправки находятся в двух отдельных UITableView ячейках)

Не могли бы вы помочь мне с этим. Ниже приведены фрагменты кода.

CheckoutViewController.swift

class CheckoutTableViewController: UITableViewController {

    // MARK: - Properties

    var shoes : [Shoe]! {
        didSet {
            tableView.reloadData()
        }
    }

    // MARK: - Structs

    struct Storyboard {
        static let billingInfoCell = "billingInfoCell"
        static let submitButtonCell = "submitButtonCell"
    }


    override func viewDidLoad() {
        super.viewDidLoad()
    }

    // MARK: - Data source

     override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 2
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        if indexPath.row == 0 {
            let cell = tableView.dequeueReusableCell(withIdentifier: Storyboard.billingInfoCell, for: indexPath) as! BillingInfoTableViewCell // Contains billing information text fields
            return cell
        } else if indexPath.row == 1 {
            let cell = tableView.dequeueReusableCell(withIdentifier: Storyboard.submitButtonCell, for: indexPath) as! SubmitButtonTableViewCell // Contains Submit button
            return cell
        } else {
            return UITableViewCell()
        }
    }

}

BillingInfoTableViewCell.swift

class BillingInfoTableViewCell: UITableViewCell {

    // MARK: - IBOutlets

    @IBOutlet weak var emailTextField: UITextField!
    @IBOutlet weak var cardNumberTextField: UITextField!
    @IBOutlet weak var expirationDataTextField: UITextField!
    @IBOutlet weak var securityNumberTextField: UITextField!


}

SubmitButtonTableViewCell.swift

class SubmitButtonTableViewCell: UITableViewCell {

    // MARK: - IBActions
    @IBAction func submitOrderButtonTapped(_ sender: UIButton) {
        print("Submit button tapped!")
    }

}

1 Ответ

2 голосов
/ 24 апреля 2019

Пожалуйста, следуйте приведенным ниже шагам.

Сделайте розетку UITableView

@IBOutlet weak var tableView: UITableView!

Сделать статическим UITableviewCell

lazy var cellBillingInfo = tableView.dequeueReusableCell(withIdentifier: Storyboard.billingInfoCell) as! BillingInfoTableViewCell
lazy var cellSubmit = tableView.dequeueReusableCell(withIdentifier: Storyboard.submitButtonCell) as! SubmitButtonTableViewCell

Добавить цель для кнопки отправкикак показано ниже.

cellSubmit.btnSumit.addTarget(self, action: #selector(submitOrderButtonTapped(_:).tou), for: .touchUpInside)

Определить метод кнопки отправки

@objc func submitOrderButtonTapped(_ sender: UIButton) {
        print(cellBillingInfo.emailTextField.text)
        print(cellBillingInfo.cardNumberTextField.text)
        print(cellBillingInfo.expirationDataTextField.text)
        print(cellBillingInfo.securityNumberTextField.text)
}

Окончательный код:

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    // MARK: - Properties

    lazy var cellBillingInfo = tableView.dequeueReusableCell(withIdentifier: Storyboard.billingInfoCell) as! BillingInfoTableViewCell
    lazy var cellSubmit = tableView.dequeueReusableCell(withIdentifier: Storyboard.submitButtonCell) as! SubmitButtonTableViewCell

    var shoes : [Shoe]! {
        didSet {
            tableView.reloadData()
        }
    }

    // MARK: - Structs

    struct Storyboard {
        static let billingInfoCell = "billingInfoCell"
        static let submitButtonCell = "submitButtonCell"
    }


    override func viewDidLoad() {
        super.viewDidLoad()
    }

    // MARK: - Data source

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 2
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        if indexPath.row == 0 {
            return cellBillingInfo
        } else if indexPath.row == 1 {
            cellSubmit.btnSumit.addTarget(self, action: #selector(submitOrderButtonTapped(_:).tou), for: .touchUpInside)
            return cellSubmit
        } else {
            return UITableViewCell()
        }
    }

    @objc func submitOrderButtonTapped(_ sender: UIButton) {
        print(cellBillingInfo.emailTextField.text)
        print(cellBillingInfo.cardNumberTextField.text)
        print(cellBillingInfo.expirationDataTextField.text)
        print(cellBillingInfo.securityNumberTextField.text)
    }
}

class SubmitButtonTableViewCell: UITableViewCell {
    @IBOutlet weak var btnSumit: UIButton!
}

Пожалуйста, отметьте как принятый, если работал длявы.

...