Pengantar
Biasanya, ketika kita membuat aplikasi menggunakan storyboard. Untuk melakukan proses pengiriman data dari satu view controller ke view controller yang lain menggunakan segue. Apakah ada cara lain selain menggunakan segue? Jawabannya ada, biasanya dilakukan ketika membuat sebuah aplikasi secara programmatically.
Pembahasan
Secara fungsional ketika button “GO” diklik, maka akan terjadi perpindahan ke halaman kedua.
@objc func submitButtonTapped() {
let destinationVC = SecondViewController()
destinationVC.firstLabel.text = "DARI HALAMAN PERTAMA"
destinationVC.delegate = self
navigationController?.pushViewController(destinationVC, animated: true)
}
Penjelasan kode:
- Membuat objek baru dari kelas SecondViewController sebagai view controller tujuan.
- Mengubah nilai properti dari objek yang baru saja dibuat
- mendelegasikan properti delegate milik SecondViewController ke FirstViewController
Sesudah berhasil mengirimkan data dari FirstViewController ke SecondViewController. Bagaimana jika ingin mengirimkan data dari SecondViewController ke FirstViewController? Caranya adalah dengan membuat delegasi di SecondViewController.
protocol LabelDelegate {
func sendDataLabel(val: String)
}
Membuat sebuah protokol yang memiliki fungsi sendDataLabel yang nantinya akan mengirim data dari pemberi delegasi yaitu SecondViewController.
var delegate: LabelDelegate!
self.delegate.sendDataLabel(val: "DARI HALAMAN KEDUA")
Buatlah sebuah variabel yang bertipe protokol LabelDelegate. Kemudian ketika button “BACK” diklik, SecondViewController akan mengirimkan data melalui variabel delegate tersebut.
Sesudah berhasil mengirimkan data dari SecondViewController ke FirstViewController. Catatan penting, FirstViewController sebagai penerima delegasi harus mengimplementasikan fungsi dari delegasi SecondViewController.
func sendDataLabel(val: String) {
firstLabel.text = val
}
Kode di atas adalah implementasi delegasi SecondViewController pada FirstViewController
Ringkasan
- Untuk mengirimkan data dari FirstViewController ke SecondViewController (alur maju) adalah dengan cara membuat objek baru dari kelas SecondViewController
- Untuk mengirimkan data dari SecondViewController ke FirstViewController (alur mundur) adalah dengan cara membuat protokol delegasi pada SecondViewController yang nantinya akan diimplementasikan di FirstViewController