Itu dimungkinkan di iOS 6 dan yang lebih baru: Anda harus menerapkan metode ini
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
Di controller tampilan Anda. Anda melakukan validasi di sana, dan jika OK maka return YES;
jika tidak maka return NO;
dan prepForSegue tidak dipanggil.
Perhatikan bahwa metode ini tidak dipanggil secara otomatis ketika memicu segues secara terprogram. Jika Anda perlu melakukan pemeriksaan, maka Anda harus memanggil shouldPerformSegueWithIdentifier untuk menentukan apakah akan melakukan segue.
if ([self shouldPerformSegueWithIdentifier:@"segueIdentifier" sender:nil]) { [self performSegueWithIdentifier:@"segueIdentifier" sender:nil]; }
Catatan: jawaban yang diterima adalah pendekatan terbaik jika Anda dapat menargetkan iOS 6. Untuk menargetkan iOS 5, jawaban ini akan berlaku.
Saya tidak percaya mungkin untuk membatalkan segue di
prepareForSegue
. Saya akan menyarankan untuk memindahkan logika Anda ke titik bahwaperformSegue
pesan pertama kali dikirim.Jika Anda menggunakan Interface Builder untuk memasang segue langsung ke kontrol (mis. Menghubungkan segue langsung ke a
UIButton
), maka Anda dapat melakukannya dengan sedikit refactoring. Kawat segue ke pengontrol tampilan alih-alih kontrol tertentu (hapus tautan segue lama, lalu seret-kontrol dari pengontrol tampilan itu sendiri ke pengontrol tampilan tujuan). Kemudian buatIBAction
di controller tampilan Anda, dan kirim kontrol ke IBAction. Kemudian Anda dapat melakukan logika Anda (periksa TextField kosong) di IBAction yang baru saja Anda buat, dan putuskan di sana untukperformSegueWithIdentifier
diprogram atau tidak .sumber
Swift 3 : func shouldPerformSegue (withIdentifier identifier: String, sender: Any?) -> Bool
Mengembalikan nilai true jika segue harus dilakukan atau salah jika harus diabaikan.
Contoh :
sumber
Atau, perilaku yang agak buruk untuk menawarkan tombol yang tidak boleh ditekan pengguna. Anda dapat membiarkan kabel segue berdiri, tetapi mulai dengan tombol dinonaktifkan. Kemudian kirimkan "editingChanged" ke UITextField ke acara dengan kontrol tampilan ala
sumber
Mudah dalam gerakan cepat.
sumber
Seperti kata Abraham, periksa valid atau tidak dalam fungsi berikut.
Dan, yang
performSegueWithIdentifier:sender:
dipanggil oleh pemrograman dapat diblokir dengan menimpa metode berikut. Secara default, ini tidak memeriksa valid atau tidak oleh-shouldPerformSegueWithIdentifier:sender:
, kita bisa melakukannya secara manual.sumber
[super performSegueWithIdentifier:identifier sender:sender];
benar?performSegueWithIdentifier:sender:
metode, dan tidak memanggilsuper
metode itu.Harus Melakukan Segue untuk Masuk Daftar
sumber
Mirip dengan jawaban Kaolin adalah membiarkan kabel terhubung ke kontrol tetapi memvalidasi kontrol berdasarkan kondisi dalam tampilan. Jika Anda mengaktifkan interaksi sel tabel maka Anda juga perlu mengatur properti userInteractionEnabled serta menonaktifkan hal-hal di dalam sel.
Misalnya, saya punya formulir dalam tampilan tabel yang dikelompokkan. Salah satu sel mengarah ke tableView lain yang bertindak sebagai pemilih. Setiap kali kontrol diubah dalam tampilan utama saya memanggil metode ini
sumber
Swift 4 Jawab:
Berikut ini adalah implementasi Swift 4 untuk membatalkan segue:
sumber
Cara lain adalah mengganti metode tableView dengan willSelectRowAt dan mengembalikan nil jika Anda tidak ingin menampilkan segue.
showDetails()
- Adalah beberapa bool. Dalam kebanyakan kasus harus diimplementasikan dalam model data yang diwakili dalam sel denganindexPath
.sumber