Mengirim dan Menerima Data Antar View Controller Tanpa Segue

Idris
2 min readApr 4, 2020

--

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

View Controller Pertama

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
View Controller kedua

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.

View Controller Pertama

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

--

--