Menurut definisi, segue tidak dapat benar-benar ada terlepas dari storyboard. Itu bahkan ada dalam nama kelas: UIStoryboardSegue
. Anda tidak membuat segues secara terprogram - ini adalah runtime storyboard yang menciptakannya untuk Anda. Anda biasanya dapat memanggil performSegueWithIdentifier:
kode pengontrol tampilan Anda, tetapi ini bergantung pada memiliki segue yang sudah disiapkan di storyboard untuk referensi.
Apa yang saya pikir Anda tanyakan adalah bagaimana Anda bisa membuat metode di pengontrol tampilan umum (kelas dasar) yang akan bertransisi ke pengontrol tampilan baru, dan akan diwarisi oleh semua kelas turunan. Anda bisa melakukan ini dengan membuat metode seperti ini ke pengontrol tampilan kelas dasar Anda:
- (IBAction)pushMyNewViewController
{
MyNewViewController *myNewVC = [[MyNewViewController alloc] init];
// do any setup you need for myNewVC
[self presentModalViewController:myNewVC animated:YES];
}
dan kemudian di kelas turunan Anda, panggil metode itu ketika tombol yang sesuai diklik atau baris tabel dipilih atau apa pun.
UIViewController
metode yang dinamaiperformSegueWithIdentifier:sender:
untuk ini.UIView
'spresentModalViewController:animated:
sudah ditinggalkan. Dari dokumen - (Tidak digunakan di iOS 6.0. Gunakan presentViewController: animated: completion: gantinya.)Saya pikir saya akan menambahkan kemungkinan lain. Salah satu hal yang dapat Anda lakukan adalah Anda dapat menghubungkan dua adegan dalam storyboard menggunakan segue yang tidak melekat pada suatu tindakan, dan kemudian secara terprogram memicu segue di dalam controller tampilan Anda. Cara Anda melakukan ini, adalah bahwa Anda harus menyeret dari ikon pemilik file di bagian bawah adegan storyboard yang merupakan adegan segueing, dan tarik ke kanan ke adegan tujuan. Saya akan melempar gambar untuk membantu menjelaskan.
Munculan akan ditampilkan untuk "Segue Manual". Saya memilih Push sebagai tipenya. Ketuk pada kotak kecil dan pastikan Anda berada di inspektur atribut. Berikan pengenal yang akan Anda gunakan untuk merujuknya dalam kode.
Ok, selanjutnya saya akan segue menggunakan item tombol bar terprogram. Di viewDidLoad atau di tempat lain saya akan membuat item tombol pada bilah navigasi dengan kode ini:
Ok, perhatikan bahwa pemilihnya adalah buttonizeButtonTap :. Jadi, tulis metode kosong untuk tombol itu dan dalam metode itu Anda akan memanggil segue seperti ini:
Parameter pengirim diperlukan untuk mengidentifikasi tombol ketika prepForSegue dipanggil. prepForSegue adalah metode kerangka kerja di mana Anda akan instantiate adegan Anda dan memberikannya nilai apa pun yang diperlukan untuk melakukan tugasnya. Begini tampilannya metode saya:
Ok, baru saja mengujinya dan berfungsi. Semoga ini bisa membantu Anda.
sumber
Saya telah menggunakan kode ini untuk membuat instance subkelas segue khusus saya dan menjalankannya secara terprogram. Sepertinya berhasil. Ada yang salah dengan ini? Saya bingung, membaca semua jawaban lain yang mengatakan itu tidak bisa dilakukan.
sumber
UIStoryboardSegue
.performSegueWithIdentifier:
benar-benar didefinisikan dalam storyboard. Saya menghindari semua masalah jika saya membuat segue sendiri.Kira ini dijawab dan diterima, tapi saya hanya ingin menambahkan beberapa detail lagi.
Apa yang saya lakukan untuk menyelesaikan masalah di mana saya akan menyajikan tampilan login sebagai layar pertama dan kemudian ingin melakukan segmentasi ke aplikasi jika login benar. Saya membuat segue dari pengontrol tampilan masuk ke pengontrol tampilan root dan memberinya pengenal seperti "myidentifier".
Kemudian setelah memeriksa semua kode login jika login benar saya akan menelepon
Kesalahpahaman terbesar saya adalah bahwa saya mencoba untuk menempatkan segue pada tombol dan jenis mengganggu segue setelah ditemukan.
sumber
Anda harus menautkan kode Anda dengan
UIStoryboard
yang Anda gunakan. Pastikan Anda masuk ke YourViewController di AndaUIStoryboard
, klik perbatasan di sekitarnya, dan kemudian setelidentifier
bidangnya keNSString
yang Anda panggil dalam kode Anda.sumber
Untuk pengendali yang ada di storyboard.
jhilgert00 apakah ini yang Anda cari?
ATAU...
sumber
baik, Anda dapat membuat dan juga dapat subklas dari UIStoryBoardSegue. Subclassing sebagian besar digunakan untuk memberikan animasi transisi kustom.
Anda dapat melihat video wwdc 2011 memperkenalkan StoryBoard. tersedia di youtube juga.
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIStoryboardSegue_Class/Reference/Reference.html#//apple_ref/occ/cl/UIStoryboardSegue
sumber
Saya ingin menambahkan klarifikasi ...
Kesalahpahaman yang umum, pada kenyataannya salah satu yang saya miliki untuk beberapa waktu, adalah bahwa segue storyboard dipicu oleh
prepareForSegue:sender:
metode ini. Bukan itu. Segue papan cerita akan tampil, terlepas dari apakah Anda telah menerapkanprepareForSegue:sender:
metode untuk pengontrol tampilan (berangkat dari).Saya belajar ini dari kuliah iTunesU Paul Hegarty yang luar biasa . Saya minta maaf tapi sayangnya tidak bisa mengingat kuliah mana.
Jika Anda menghubungkan segue antara dua pengontrol tampilan di storyboard, tetapi jangan mengimplementasikan a
prepareForSegue:sender:
metode, segue akan tetap segue ke pengontrol tampilan target. Namun itu akan segue ke controller tampilan yang tidak siap.Semoga ini membantu.
sumber
Segit Storyboard tidak boleh dibuat di luar storyboard. Anda harus memasangnya, meskipun ada kekurangannya.
Referensi UIStoryboardSegue dengan jelas menyatakan:
Anda masih dapat secara programatik menceritakan storyboard untuk menyajikan pengontrol tampilan menggunakan segue using
presentModalViewController:
ataupushViewController:animated:
panggilan, tetapi Anda membutuhkan instance storyboard.Anda dapat memanggil
UIStoryboard
metode kelas untuk mendapatkan storyboard bernama dengan bundel nil untuk bundel utama.storyboardWithName:bundle:
sumber
Pertama, misalkan Anda memiliki dua tampilan berbeda di storyboard, dan Anda ingin menavigasi dari satu layar ke layar lainnya, jadi ikuti langkah-langkah ini:
1). Tentukan semua tampilan Anda dengan file kelas dan juga storyboard id di inspektur identitas.
2). Pastikan Anda menambahkan pengontrol navigasi ke tampilan pertama. Pilih di Storyboard lalu Editor> Embed In> Navigation Controller
3). Di kelas pertama Anda, impor "secondClass.h"
4). Tambahkan perintah ini di IBAction yang harus melakukan segue
5).
@"second"
adalah kelas kontroler pandangan kedua, storyboard id.sumber
self.storyboard
seharusnya:UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
storyboardWithName:@"Main"
[self showDetailViewController:next sender:self];
atau[self showViewController:next sender:self];
Saya merekayasa balik dan membuat implementasi open source (kembali) dari segit UIStoryboard: https://github.com/acoomans/Segway
Dengan perpustakaan itu, Anda dapat mendefinisikan segues secara terprogram (tanpa papan cerita apa pun).
Semoga ini bisa membantu.
sumber
Beberapa masalah, sebenarnya:
Pertama, dalam proyek yang Anda unggah untuk kami, segue tidak mengandung pengidentifikasi "segue1":
tidak ada pengidentifikasi
Anda harus mengisi pengenal itu jika belum.
Kedua, saat Anda mendorong dari tampilan tabel ke tampilan tabel, Anda memanggil initWithNibName untuk membuat controller tampilan. Anda benar-benar ingin menggunakan instantiateViewControllerWithIdentifier.
sumber
Berikut ini contoh kode untuk
Creating a segue programmatically
:sumber
self.prepare(for: self.commonSegue, sender: self)
dari metode tindakan Anda. Lalu apa gunanya membandingkanif self.commonSegue == segue {...}
dalamprepare(for:sender)
metode?prepare(for:sender:)
, Anda dapat mengonfigurasikan pengontrol tampilan tujuan sebelum ditampilkan. Tentu saja Anda juga bisa melakukannyaactionFunction
.