I'm building a basic App where you have two ViewControllers. On ViewController2 you fill in some text fields, press a button and that data is being sent back to ViewController1 and is displayed inside a tableViewCell.
I went through some Tutorials and managed to accomplish sending the data using a segue and delegation. I ended up with a function which is declared inside a protocol on VC2 and sends the data to VC1. Now I'm wondering how I can use this data inside my tableView function on VC1. I know, this is very basic but I'm a beginner.
Here is my (shortened) Code:
VC2
protocol SendingBookDataProtocol {
func sendDataToHomeController(dataTitle: String, dataAuthor: String, dataCurrentPage: String, dataTotalPages: String)
}
class AddBookController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var delegate: SendingBookDataProtocol? = nil
@IBOutlet weak var textfieldTitle: UITextField!
@IBOutlet weak var textfieldAuthor: UITextField!
@IBOutlet weak var fieldCurrentPage: UITextField!
@IBOutlet weak var fieldTotalPages: UITextField!
@IBOutlet weak var buttonSave: UIButton!
@IBAction func buttonSave(_ sender: Any) {
if self.delegate != nil && self.textfieldTitle.text != nil && self.textfieldAuthor.text != nil && self.fieldCurrentPage.text != nil && self.fieldTotalPages.text != nil {
let titleToBeSent = self.textfieldTitle.text
let authorToBeSent = self.textfieldAuthor.text
let currentPageToBeSent = self.fieldCurrentPage.text
let totalPagesToBeSent = self.fieldTotalPages.text
self.delegate?.sendDataToHomeController(dataTitle: titleToBeSent!, dataAuthor: authorToBeSent!, dataCurrentPage: currentPageToBeSent!, dataTotalPages: totalPagesToBeSent!)
dismiss(animated: true, completion: nil)
}
}
VC1
class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, SendingBookDataProtocol {
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
let nib = UINib(nibName: "BookCell", bundle: nil)
tableView.register(nib, forCellReuseIdentifier: "BookCell")
tableView.delegate = self
tableView.dataSource = self
}
// tableView Functions
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "BookCell", for: indexPath) as! BookCell
cell.title.text = "test" // this needs to be dataTitle
return cell
}
func sendDataToHomeController(dataTitle: String, dataAuthor: String, dataCurrentPage: String, dataTotalPages: String) {
print(dataTitle, dataAuthor, dataCurrentPage, dataTotalPages)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "getBookData" {
let addBookVC: AddBookController = segue.destination as! AddBookController
addBookVC.delegate = self
}
}
}
Thanks for any help!