Menggunakan storyboard ini sangat mudah. Anda cukup menyeret tindakan ke "Keluar". Tetapi bagaimana saya harus menyebutnya dari kode saya?
Menggunakan storyboard ini sangat mudah. Anda cukup menyeret tindakan ke "Keluar". Tetapi bagaimana saya harus menyebutnya dari kode saya?
Jawaban:
Masukkan Nama Segue untuk melepas lelah.
Kemudian, - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.
dengan mengidentifikasi segue Anda.
Inilah jawaban lengkap dengan Objective C dan Swift:
1) Buat IBAction
segue bersantai di pengontrol tampilan tujuan Anda (tempat Anda ingin segue). Di mana saja dalam file implementasi.
// Objective C
- (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue {
}
// Swift
@IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {
}
2) Pada pengontrol tampilan sumber (controller yang Anda pilih), ⌃ + seret dari "Nama aktivitas" untuk keluar. Anda harus melihat segmen pelepasan yang dibuat pada langkah 1 di sembulan. (Jika Anda tidak melihatnya, tinjau langkah pertama). Pilih relaxToContainerVC: dari sembulan, atau apa pun yang Anda beri nama metode Anda untuk menghubungkan pengontrol sumber Anda ke IBAction pelepasan.
3) Pilih segue dalam garis besar dokumen viewer controller dari storyboard (akan terdaftar di dekat bagian bawah), dan berikan pengenal .
4) Panggil segue bersantai menggunakan metode ini dari pengontrol tampilan sumber , gantikan nama segue bersantai Anda.
// Tujuan C
[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];
// Swift
self.performSegueWithIdentifier("unwindToContainerVC", sender: self)
NB. Gunakan properti sourceViewController dari parameter segue pada metode bersantai untuk mengakses properti yang terbuka pada pengontrol sumber. Juga, perhatikan bahwa framework menangani memberhentikan pengontrol sumber. Jika Anda ingin mengonfirmasi ini, tambahkan metode dealloc ke pengontrol sumber dengan pesan log yang akan diaktifkan setelah terbunuh. Jika dealloc tidak menyala, Anda mungkin memiliki siklus tetap.
(IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue
ctrl+drag
dari ViewController
ke Exit
sangat membantu. Terima kasih!
bradleygriffith
Jawabannya bagus. Saya mengambil langkah 10 dan membuat tangkapan layar untuk penyederhanaan. Ini adalah tangkapan layar di Xcode 6.
unwind segue
di bilah sisi:[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];
UIViewController
. Maka solusi Anda akan berhasil
Saya menggunakan [self dismissViewControllerAnimated: YES completion: nil];
yang akan mengembalikan Anda ke panggilan ViewController
.
Mengutip teks dari Catatan Teknis Apple pada Segmen Unwind: Untuk menambahkan segue bersantai yang hanya akan dipicu secara programatik, kontrol + seret dari ikon pengontrol tampilan adegan ke ikon keluarnya, lalu pilih tindakan pelepasan untuk segue baru dari menu sembulan.
Jawaban Vishal Chaudhry di atas berhasil untukku. Saya juga akan menambahkan itu untuk memicu seque secara manual menggunakan:
[self performSegueWithIdentifier:@"mySegueName" sender:self];
dari dalam ViewController Anda juga harus memilih segue bersantai di bawah Scene ViewController's di storyboard dan dalam tampilan properti di RHS memastikan bahwa bidang Indentifier berisi penamaan yang Anda maksud dalam kode ("mySegueName" pada contoh di atas ).
Jika Anda mengabaikan langkah ini, baris di atas akan mengeluarkan pengecualian bahwa nama seque tidak dikenal.
Solusi kompatibel yang akan bekerja untuk versi sebelum ios6, bagi mereka yang tertarik:
- (void)unwindToViewControllerOfClass:(Class)vcClass animated:(BOOL)animated {
for (int i=self.navigationController.viewControllers.count - 1; i >= 0; i--) {
UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:i];
if ([vc isKindOfClass:vcClass]) {
[self.navigationController popToViewController:vc animated:animated];
return;
}
}
}
SWIFT 4 :
1. Buat @IBAction dengan pengontrol bagian dalam segue yang ingin Anda lepas :
@IBAction func unwindToVC(segue: UIStoryboardSegue) {
}
2. Di storyboard, dari controller yang ingin Anda segue (lepas) dari ctrl + seret dari tanda controller untuk keluar dari sign dan pilih metode yang Anda buat sebelumnya:
3. Sekarang Anda dapat melihat bahwa dalam garis besar dokumen Anda memiliki baris baru dengan judul "Unwind segue ....". Sekarang Anda harus mengklik pada baris ini dan membuka inspektur atribut untuk menetapkan pengenal (dalam kasus saya relaxSegueIdentifier ).
4. Anda hampir selesai! Sekarang Anda perlu membuka pengontrol tampilan yang ingin Anda hilangkan dan membuat beberapa metode yang akan melakukan segue. Misalnya Anda dapat menambahkan tombol, hubungkan dengan kode dengan @IBAction , setelah itu di dalam IBAction ini tambahkan perfromSegue (withIdentifier: sender :) metode:
@IBAction func unwindToSomeVCWithSegue(_ sender: UIButton) {
performSegue(withIdentifier: "unwindSegueIdentifier", sender: nil)
}
Jadi itu yang harus Anda lakukan!
Bagi mereka yang bertanya-tanya bagaimana melakukan ini dengan VC tidak diatur melalui storyboard (mereka yang datang ke pertanyaan ini dari mencari "secara terprogram" + "bersantai segue").
Mengingat bahwa Anda tidak dapat membuat segmen bersantai secara terprogram, solusi terprogram semata-mata adalah menelepon:
navigationController?.popToRootViewController(animated: true)
yang akan memunculkan semua pengontrol tampilan di stack kembali ke pengontrol tampilan root Anda.
Untuk memunculkan pengontrol tampilan paling atas dari tumpukan navigasi, gunakan:
navigationController?.popViewController(animated: true)
FYI: Agar jawaban @ Vadim bekerja dengan aksi seque bersantai manual yang dipanggil dari dalam View Controller, Anda harus menempatkan perintah:
[self performSegueWithIdentifier:(NSString*) identifier sender:(id) sender];
di dalam metode viewDidAppear kelas overriden seperti:
-(void) viewDidAppear:(BOOL) animated
{
[super viewDidAppear: animated];
[self performSegueWithIdentifier:@"SomeSegueIdentifier" sender:self];
}
Jika Anda memasukkannya ke metode ViewController lain seperti viewDidLoad atau viewWillAppear itu akan diabaikan.
performSegueWithIdentfier
melakukan hal itu: melakukan segue dari satu ViewController ke yang lain