【发布时间】:2018-05-30 07:48:18
【问题描述】:
我正在尝试使用委托将数据 BACK 传递给之前的 viewController。
有谁知道如何将数据从ViewController B 传回ViewController A?
所以我想将数据从SecondVC 传递到FirstVC,并使用SecondVC 4 地址文本字段中的数据更新自定义表格视图单元格,但由于某种原因,它根本没有更新。
任何帮助都将不胜感激,因为我才刚刚起步,所以尝试了各种各样的事情,但无法让它发挥作用。
FirstVC
import UIKit
class MainVC: UIViewController, UITableViewDelegate, UITableViewDataSource, DataSentDelegate {
@IBOutlet weak var deliveryAddress: UITableView!
var customCell: AddressCell = AddressCell()
override func viewDidLoad() {
super.viewDidLoad()
deliveryAddress.delegate = self
deliveryAddress.dataSource = self
deliveryAddress.reloadData()
}
func userDidEnterData(firstAddress: String, secondAddress: String, cityAddress: String, postcodeAddress: String) {
customCell.firstLineAddressLbl?.text = firstAddress
customCell.secondLineAddressLbl?.text = secondAddress
customCell.cityLineAddressLbl?.text = cityAddress
customCell.postcodeLineAddressLbl?.text = postcodeAddress
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "deliveryAddressCell", for: indexPath) as! AddressCell
cell.updateUI()
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 165
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "addDeliveryAddressVC" {
let addDestination:AddingDestinationVC = segue.destination as! AddingDestinationVC
addDestination.delegate = self
}
}
}
第二个VC
import UIKit
protocol DataSentDelegate {
func userDidEnterData(firstAddress: String, secondAddress: String, cityAddress: String, postcodeAddress: String)
}
class AddingDestinationVC: UIViewController {
@IBOutlet weak var firstLineAddressTextField: UITextField!
@IBOutlet weak var secondLineAddressTextField: UITextField!
@IBOutlet weak var cityLineAddressTextField: UITextField!
@IBOutlet weak var postcodeLineAddressTextField: UITextField!
var delegate: DataSentDelegate?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func addBtnWasPressed(_ sender: Any) {
if delegate != nil {
if firstLineAddressTextField.text != nil {
let firstLineAddress = firstLineAddressTextField.text
print(firstLineAddress as Any)
let secondLineAddress = secondLineAddressTextField.text
let cityLineAddress = secondLineAddressTextField.text
let postcodeLineAddress = postcodeLineAddressTextField.text
delegate?.userDidEnterData(firstAddress: firstLineAddress!, secondAddress: secondLineAddress!, cityAddress: cityLineAddress!, postcodeAddress: postcodeLineAddress!)
navigationController?.popViewController(animated: true)
}
}
}
}
自定义单元
import UIKit
class AddressCell: UITableViewCell {
@IBOutlet weak var firstLineAddressLbl: UILabel!
@IBOutlet weak var secondLineAddressLbl: UILabel!
@IBOutlet weak var cityLineAddressLbl: UILabel!
@IBOutlet weak var postcodeLineAddressLbl: UILabel!
@IBOutlet weak var numberLbl: UILabel!
@IBOutlet weak var startBtn: UIButton!
@IBOutlet weak var distanceLbl: UILabel!
@IBOutlet weak var metricLbl: UILabel!
func updateUI() {
DeliveryDestinations(FirstLineAddress: firstLineAddressLbl.text, SecondLineAddress: secondLineAddressLbl.text, CityLineAddress: cityLineAddressLbl.text, PostCodeLineAddress: postcodeLineAddressLbl.text)
}
}
模型文件
import Foundation
struct DeliveryDestinations {
var FirstLineAddress: String?
var SecondLineAddress: String?
var CityLineAddress: String?
var PostcodeLineAddress: String?
init(FirstLineAddress: String? , SecondLineAddress: String?, CityLineAddress: String?, PostCodeLineAddress: String?) {
self.FirstLineAddress = FirstLineAddress
self.SecondLineAddress = SecondLineAddress
self.CityLineAddress = CityLineAddress
self.PostcodeLineAddress = PostCodeLineAddress
}
}
【问题讨论】:
-
您需要将模型添加到 ViewController 并使用 TableView.reload 数据进行更新,并使用来自您的 AdditionalDestinationVC 的新更新数据
-
在这里看到很多错误。可以分享一下演示项目吗?
-
@DharmeshKheni 我有 github 网址 github.com/Marius-Dragan/iDeliver/tree/03-PassingData
标签: ios iphone swift swift3 xcode9