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?