Saya memiliki banyak anotasi dalam tampilan peta (dengan rightCalloutAccessory
tombol). Tombol akan melakukan segue dari ini mapview
ke a tableview
. Saya ingin meneruskan tableview
objek yang berbeda (yang menyimpan data) tergantung pada tombol info yang diklik.
Misalnya: (benar-benar dibuat-buat)
- annotation1 (Austin) -> pass data obj 1 (relevan dengan Austin)
- annotation2 (Dallas) -> pass data obj 2 (relevan dengan Dallas)
- annotation3 (Houston) -> pass data obj 3 dan seterusnya ... (Anda mendapatkan ide)
Saya dapat mendeteksi tombol info yang diklik.
Saya menggunakan prepareForSegue
: untuk meneruskan data obj ke tujuan ViewController
. Karena saya tidak dapat membuat panggilan ini mengambil argumen tambahan untuk objek data yang saya butuhkan, apa saja cara elegan untuk mencapai efek yang sama (objek data dinamis)?
Tip apa pun akan dihargai.
ios
xcode
uitableview
mapkit
storyboard
berdecak
sumber
sumber
Jawaban:
Cukup ambil referensi ke pengontrol tampilan target dalam
prepareForSegue:
metode dan berikan benda yang Anda butuhkan ke sana. Ini sebuah contoh ...REVISI: Anda juga dapat menggunakan
performSegueWithIdentifier:sender:
metode untuk mengaktifkan transisi ke tampilan baru berdasarkan pilihan atau tekan tombol.Sebagai contoh, pertimbangkan saya memiliki dua pengendali tampilan. Yang pertama berisi tiga tombol dan yang kedua perlu tahu tombol mana yang telah ditekan sebelum transisi. Anda dapat menyambungkan tombol ke
IBAction
dalam kode Anda yang menggunakanperformSegueWithIdentifier:
metode, seperti ini ...EDIT: Aplikasi demo yang semula saya lampirkan sekarang berumur enam tahun, jadi saya telah menghapusnya untuk menghindari kebingungan.
sumber
[vc setMyObjectHere:object];
ini secara dinamis. yaitu obj1 untuk button1, obj2 untuk button2 Masalahnya adalah saya tidak bisa menyampaikan argumen. Apakah ada cara untuk mengatasi ini?Kadang-kadang membantu untuk menghindari membuat ketergantungan waktu kompilasi antara dua pengontrol tampilan. Inilah cara Anda dapat melakukannya tanpa peduli dengan jenis pengontrol tampilan tujuan:
Jadi selama pengendali tampilan tujuan Anda menyatakan milik umum, mis:
Anda dapat mengatur properti ini di pengontrol tampilan sebelumnya seperti yang saya jelaskan di atas.
sumber
setMyData:
. Itu ketergantungan. Fakta bahwa Anda menggunakan pemilih untuk menghindari kesalahan kompilasi harus diperlakukan sebagai kelemahan dari pendekatan Anda, bukan manfaat. Ini mengejutkan bagi saya berapa banyak pengembang telah kehilangan konsep bahwa kompilasi kesalahan waktu harus lebih disukai daripada kesalahan run-time.Dalam Swift 4.2 saya akan melakukan sesuatu seperti itu:
sumber
Saya memiliki kelas pengirim , seperti ini
Saya menggunakan kelas pengirim ini untuk meneruskan objek ke
prepareForSeque:sender:
sumber
prepareForSegue
atau menerapkannya dan anggapannya adalah prepForSegue dipanggil sendiri yaitu kita tidak perlu melakukan sesuatu seperti[self prepareForSegue]
Saya menemukan pertanyaan ini ketika saya mencoba mempelajari cara meneruskan data dari satu Pengontrol Tampilan ke yang lain. Saya membutuhkan sesuatu yang visual untuk membantu saya belajar, jadi jawaban ini adalah pelengkap bagi yang lain yang sudah ada di sini. Ini sedikit lebih umum daripada pertanyaan asli tetapi dapat disesuaikan untuk bekerja.
Contoh dasar ini berfungsi seperti ini:
Idenya adalah untuk meneruskan string dari bidang teks di Pengendali Tampilan Pertama ke label di Pengendali Tampilan Kedua.
Pengontrol Tampilan Pertama
Pengendali Tampilan Kedua
Ingat untuk
UITextField
danUILabel
.Sumber
Cara mengirim data melalui segue (cepat) (tutorial YouTube)
Lihat juga
Lihat Pengontrol: Melewati data maju dan meneruskan data kembali (jawaban yang lebih lengkap)
sumber
Untuk Swift gunakan ini,
sumber
Saya telah mengimplementasikan perpustakaan dengan kategori di UIViewController yang menyederhanakan operasi ini. Pada dasarnya, Anda mengatur parameter yang ingin Anda lewati di NSDictionary yang terkait dengan item UI yang melakukan segue. Ia bekerja dengan segues manual juga.
Misalnya, Anda bisa melakukannya
untuk segue manual atau buat tombol dengan segue dan gunakan
Jika pengontrol tampilan tujuan tidak sesuai dengan kode nilai kunci untuk kunci, tidak ada yang terjadi. Ini bekerja dengan nilai kunci juga (berguna untuk segmen segues). Lihat di sini https://github.com/stefanomondino/SMQuickSegue
sumber
Solusi saya serupa.
sumber
Cukup gunakan fungsi ini.
sumber
Saya menggunakan solusi ini sehingga saya bisa menyimpan permohonan segue dan komunikasi data dalam fungsi yang sama:
Kasus penggunaan akan menjadi seperti:
Ini sepertinya bekerja untuk saya, bagaimanapun, saya tidak 100% yakin bahwa fungsi perform dan persiapan selalu dieksekusi pada utas yang sama.
sumber