Pendeknya
Sebuah Shalawat bersantai (kadang-kadang disebut exit Shalawat ) dapat digunakan untuk kembali menavigasi melalui segues push, modal atau popover (seperti jika Anda muncul item navigasi dari bar navigasi, ditutup popover atau diberhentikan controller tampilan modally disajikan). Selain itu, Anda benar-benar dapat bersantai melalui tidak hanya satu tetapi serangkaian push / modal / popover segues, misalnya "kembali" beberapa langkah dalam hierarki navigasi Anda dengan tindakan bersantai tunggal.
Saat Anda melakukan segue pelepasan, Anda perlu menentukan tindakan, yang merupakan metode tindakan dari pengontrol tampilan yang ingin Anda pelonggarkan.
Tujuan-C:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
Cepat:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
Nama metode tindakan ini digunakan saat Anda membuat segmen santai di storyboard. Selanjutnya, metode ini disebut sesaat sebelum segue bersantai dilakukan. Anda bisa mendapatkan pengontrol tampilan sumber dari UIStoryboardSegue
parameter yang dikirimkan untuk berinteraksi dengan pengontrol tampilan yang menginisiasi segue (misalnya untuk mendapatkan nilai properti dari pengontrol tampilan modal). Dalam hal ini, metode ini memiliki fungsi yang sama dengan prepareForSegue:
metode UIViewController
.
Pembaruan iOS 8: Unwind segues juga berfungsi dengan segues adaptif iOS 8, seperti Show dan Show Detail .
Sebuah contoh
Mari kita memiliki storyboard dengan pengontrol navigasi dan tiga pengontrol tampilan anak:
Dari Green View Controller Anda dapat bersantai (menavigasi kembali) ke Red View Controller. Dari Biru Anda dapat bersantai ke Hijau atau Merah melalui Hijau. Untuk mengaktifkan unwinding, Anda harus menambahkan metode tindakan khusus ke Merah dan Hijau, misalnya di sini adalah metode tindakan dalam Merah:
Tujuan-C:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
Cepat:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
Setelah metode tindakan telah ditambahkan, Anda dapat menentukan segmen pelepasan di storyboard dengan menyeret kontrol ke ikon Exit. Di sini kami ingin bersantai ke Merah dari Hijau ketika tombol ditekan:
Anda harus memilih tindakan yang ditentukan dalam pengontrol tampilan yang ingin Anda hilangkan:
Anda juga dapat bersantai ke Merah dari Biru (yang merupakan "dua langkah lagi" di tumpukan navigasi). Kuncinya adalah memilih tindakan relaksasi yang benar.
Sebelum segue pelepasan dilakukan, metode tindakan dipanggil. Dalam contoh ini saya mendefinisikan segmen bersantai ke Merah dari Hijau dan Biru. Kami dapat mengakses sumber pelepasan dalam metode tindakan melalui parameter UIStoryboardSegue:
Tujuan-C:
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
UIViewController* sourceViewController = unwindSegue.sourceViewController;
if ([sourceViewController isKindOfClass:[BlueViewController class]])
{
NSLog(@"Coming from BLUE!");
}
else if ([sourceViewController isKindOfClass:[GreenViewController class]])
{
NSLog(@"Coming from GREEN!");
}
}
Cepat:
@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) {
if let blueViewController = unwindSegue.sourceViewController as? BlueViewController {
println("Coming from BLUE")
}
else if let redViewController = unwindSegue.sourceViewController as? RedViewController {
println("Coming from RED")
}
}
Unwinding juga bekerja melalui kombinasi push / modal segues. Misalnya jika saya menambahkan pengontrol tampilan Kuning lain dengan modal segue, kita bisa melepas dari Yellow kembali ke Red dalam satu langkah:
Tidak tergulung dari Kode
Saat Anda menentukan segmen pelepas dengan menyeret-kan sesuatu ke simbol Keluar dari pengontrol tampilan, segue yang baru muncul di Document Outline:
Memilih segue dan pergi ke Inspektur Atribut mengungkapkan properti "Identifier". Gunakan ini untuk memberikan pengidentifikasi unik ke segue Anda:
Setelah ini, segmen pelepasan dapat dilakukan dari kode sama seperti segmen lainnya:
Tujuan-C:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
Cepat:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
dismissViewControllerAnimated:completion:
ataupopViewControllerAnimated:
mencapai hal yang sama?dismissViewControllerAnimated:completion:
ataupopViewControllerAnimated:
adalah bahwa metode yang Anda tambahkan ke pengontrol tampilan yang Anda inginkan disebut dan sehingga Anda memiliki cara mudah untuk mengetahui pengontrol tampilan yang disajikan selesai tanpa harus membuat pengendali tampilan penyajian delegasi dari pengontrol tampilan yang disajikan .Sejauh cara menggunakan segue bersantai di StoryBoard ...
Langkah 1)
Buka kode untuk pengontrol tampilan yang ingin Anda hilangkan dan tambahkan ini:
Objektif-C
Pastikan juga mendeklarasikan metode ini dalam file .h Anda di Obj-C
Cepat
Langkah 2)
Di storyboard, buka tampilan yang ingin Anda hilangkan dan cukup tarik segue dari tombol Anda atau apa pun hingga ikon "EXIT" oranye kecil di kanan atas tampilan sumber Anda.
Seharusnya sekarang ada opsi untuk terhubung ke "- melepasToViewControllerNameHere"
Itu saja, segue Anda akan santai ketika tombol Anda diketuk.
sumber
Seg Unwind digunakan untuk "kembali" ke beberapa pengontrol tampilan, dari mana, melalui sejumlah segues, Anda sampai ke pengontrol tampilan "saat ini".
Bayangkan Anda memiliki sesuatu
MyNavController
denganA
sebagai pengontrol tampilan root. Sekarang Anda menggunakan tombol tekan untukB
. Sekarang pengendali navigasi memiliki A dan B dalamviewControllers
susunannya, dan B terlihat. Sekarang Anda hadir secara modernC
.Dengan segue pelepasan, Anda sekarang dapat melepaskan "kembali" dari
C
keB
(yaitu mengabaikan pengontrol tampilan yang disajikan secara moderat), pada dasarnya "membatalkan" modal segue. Anda bahkan dapat melepas semua jalan kembali ke pengontrol tampilan rootA
, membatalkan baik modal segue dan push segue.Lepas segues memudahkan untuk mundur. Misalnya, sebelum iOS 6, praktik terbaik untuk memberhentikan pengontrol tampilan yang disajikan adalah mengatur pengendali tampilan yang disajikan sebagai delegasi pengontrol tampilan yang disajikan, kemudian memanggil metode delegasi khusus Anda, yang kemudian menolak disajikanViewController . Kedengarannya rumit dan rumit? Dulu. Itu sebabnya bersantai segues bagus.
sumber
dismissViewController:animated
dari pengontrol yang disajikan. Anda tidak perlu mendelegasikan itu. Tentu saja jika Anda perlu mengirimkan data kembali, maka Anda perlu pendelegasian atau metode lain.dismissViewController:animated:
dari pengontrol yang disajikan, "praktik terbaik" memang memanggil metode delegasi pada pengontrol yang hadir untuk melakukan itu untuk Anda, seperti yang disebutkan.Sesuatu yang saya tidak lihat disebutkan dalam jawaban lain di sini adalah bagaimana Anda berurusan dengan unwinding ketika Anda tidak tahu di mana awal segue berasal, yang bagi saya adalah kasus penggunaan yang lebih penting. Misalnya, Anda memiliki pengontrol tampilan bantuan ( H ) yang Anda tampilkan secara modal dari dua pengontrol tampilan yang berbeda ( A dan B ):
A → H
B → H
Bagaimana Anda mengatur Segue bersantai sehingga Anda kembali ke pengontrol tampilan yang benar? Jawabannya adalah bahwa Anda mendeklarasikan tindakan pelepasan dalam A dan B dengan nama yang sama , misalnya:
Dengan cara ini, pelepasan akan menemukan pengontrol tampilan mana saja ( A atau B ) yang memulai segue dan kembali ke sana.
Dengan kata lain, memikirkan tindakan unwind sebagai menjelaskan di mana Shalawat tersebut datang dari , daripada di mana ia akan.
sumber
IOS Swift:
Langkah 1: tentukan metode ini ke tampilan pengontrol MASTER Anda. di mana Anda ingin kembali:
Langkah 2: (StoryBoard) Klik kanan pada Anda tombol BUDAK / ANAK KELUAR dan Pilih "goToSideMenu" Sebagai tindakan untuk Menghubungkan Anda Tombol di mana Anda akan mengklik untuk kembali ke Anda tampilan pengendali MASTER:
langkah 3: Bangun dan Jalankan ...
sumber
Misalnya jika Anda menavigasi dari viewControllerB ke viewControllerA maka dalam viewControllerA Anda delegasi di bawah ini akan memanggil dan data akan dibagikan.
sumber