Pembuat antarmuka Xcode 6 secara default memiliki kotak centang baru "gunakan kelas ukuran". Itu membuat tampilan menjadi adaptif.
Ketika saya mencoba membuat segue antara 2 tampilan di papan cerita saya, saya memiliki opsi baru:
bukan tua:
Sekarang kita memiliki "show" dan "present modally" daripada "push" dan "modal". Opsi lama ditandai sebagai usang. Saya telah memilih opsi "tampilkan", karena dalam pengaturan segue disebut "tampilkan (mis. Dorong)
Tapi itu tidak memaksa. Animasi segmen terlihat seperti slide dari bawah (modal) dan bilah navigasi menghilang.
Pertanyaannya adalah: Bagaimana cara membuat "pertunjukan" berfungsi seperti push? Apakah mungkin atau haruskah saya menggunakan "push (deprecated)"? Di mana saya dapat menemukan informasi tentang jenis baru segue? Satu-satunya hal yang saya temukan di pustaka pengembang iOS8 adalah Storyboards Membantu Anda Merancang Antarmuka Pengguna Anda tetapi tidak ada informasi tentang "show" segue.
MEMPERBARUI
Saya mencoba membuat proyek baru dan "show" benar-benar berfungsi seperti "push". Saya pikir masalah dalam proyek saya bisa jadi karena saya menggunakan kembali pengontrol navigasi dengan kode seperti ini, tetapi saya tidak tahu cara memperbaikinya.
if ( [segue isKindOfClass: [SWRevealViewControllerSegue class]] ) {
SWRevealViewControllerSegue *swSegue = (SWRevealViewControllerSegue*) segue;
swSegue.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc) {
UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
[navController setViewControllers: @[dvc] animated: NO ];
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
};
}
Setelah itu saya coba push NewViewController setelah MainViewController
PEMBARUAN 2:
Sepertinya saya hanya masalah iOS 7, iOS 7.1.
sumber
Sudah ada jawaban yang diterima, tetapi saya ingin memberikan sedikit lebih banyak informasi, mungkin informasi yang sebelumnya tidak tersedia.
Seperti yang telah disebutkan sebelumnya, segmen "push" dan "modal" sudah tidak digunakan lagi, dan masing-masing telah digantikan oleh "show" dan "present modally". Menurut dokumentasi Apple, segue baru telah dibagi lagi menjadi segue yang beradaptasi dengan kelas ukuran. Yang lebih lama seharusnya hanya digunakan untuk mendukung versi iOS yang lebih lama dari iOS 8.
Dokumen di tautan berikut menjelaskan itu dan deskripsi semua segmen yang tersedia, lama dan baru.
Menambahkan Segue Antar Adegan di Papan Cerita
Jika URL berubah di masa mendatang, berikut adalah penjelasan yang diberikan untuk setiap segmen baru:
sumber
Tidak ada yang salah dengan jawaban yang lain tetapi yang ini menjelaskan apa yang terjadi, bagaimana Anda dapat memverifikasi bahwa itu terjadi dan bagaimana mengurangi masalah di masa depan.
Latar Belakang
Dalam kasus saya, tidak ada Show Segues saya yang berfungsi meskipun saya sudah memiliki UINavigationController sebagai pengontrol tampilan awal saya (dengan konten saya UIViewController sebagai root).
Mengapa dan Bagaimana Pertunjukan Segue Istirahat
Segue acara berhenti jika memiliki tindakan yang terkait dengan segue dalam xml sumber storyboard. Skenario umum yang menyebabkan hal ini mungkin terjadi jika Anda telah mendefinisikan ulang segmen dari segmen manual yang sebelumnya disebut dalam kode. Ini menyisakan bit berikut di storyboard xml.
Untuk mengakomodasi tindakan kustom apa pun saat menggunakan segue dari storyboard, seseorang cukup mengetuk prepforSegue dan mencegat pengontrol tampilan tujuan dan memanggil metode apa pun dari lokasi itu. Bagaimanapun, efek samping untuk bug kecil ini (bug adalah kenyataan bahwa ketika Anda mendefinisikan ulang segue, itu tidak diatur dengan benar di xml ~ yaitu tindakan tetap bahkan setelah Anda mengubah segue ke yang beroperasi dari UIView (atau UIControl) ke pengontrol tampilan target).
Sayangnya solusi yang paling langsung gagal. Jadi, hanya menghapus atribut xml untuk tindakan dari dalam Storyboard TIDAK akan memperbaiki masalah. Sebaliknya, seseorang hanya perlu menghapus dan membuat ulang segue di storyboard.
Saat dibuat ulang, storyboard xml tidak lagi memiliki tindakan yang terkait dengan segmen tertentu dan Pertunjukan akan dijalankan sebagai Push.
Contoh Xml untuk Show Segue yang benar
Mitigasi
Untuk mencegah pengulangan, seseorang hanya perlu tetap menggunakan segmen storyboard non-manual jika memungkinkan dengan menggunakan preparedForSegue untuk menambahkan tindakan yang diperlukan berdasarkan pengontrol tampilan tujuan. Atau jika Anda harus mencampur dan mencocokkan, lakukan tindakan pencegahan untuk memverifikasi bahwa Tampilkan segues Anda tidak memiliki tindakan yang dilampirkan di papan cerita xml. Jika Anda berurusan dengan proyek yang lebih lama maka Anda harus memberikan perhatian khusus pada kode sumber Storyboard karena saya telah menemukan beberapa masalah.
sumber
Seperti yang dikomentari Scott Robertson di sini , ini tampak seperti bug di iOS 7.
Tampaknya di iOS 8, transisi disimpulkan pada waktu proses (perilaku yang benar), sedangkan di iOS 7 transisi disimpulkan pada waktu desain (perilaku buggy).
Solusi paling sederhana adalah dengan menambahkan pengontrol navigasi yang tidak digunakan ke storyboard dan menautkannya sehingga pengontrol tampilan yang dimaksud adalah bagian dari pengontrol navigasi ini. Anda tidak benar-benar harus membuat instantiate pengontrol navigasi, Anda hanya perlu pengontrol tampilan buggy untuk mengetahui bahwa itu tertanam di pengontrol navigasi.
Catatan: Mensimulasikan bilah navigasi tidak cukup untuk tujuan ini; Anda harus benar-benar memiliki pengontrol navigasi di tumpukan dorongnya.
Untuk mereproduksi bug:
initWithRootViewController:
metode.Untuk memperbaiki bug:
workaround for show segues in iOS 7
).Perhatikan bagaimana pengontrol navigasi ditambahkan di gambar kedua, dan bagaimana pengontrol tersebut tidak memiliki panah masuk (yaitu tidak ada cara untuk membuat instance selain menggunakan pengenal pengontrol tampilan).
sumber
Saya tahu saya terlambat untuk ini tetapi saya ingin membagikan apa yang saya pelajari. Ini sebenarnya bug dan masih ada sampai sekarang (2014-12-18).
Saya menulis artikel tentang ini di sini .
Ini mudah direproduksi; di iOS8 akan bekerja dengan baik dan bahkan di iOS7.x selama Anda tidak mendorong pengontrol tampilan secara terprogram ke tumpukan sebelum memanggil
Show
segue.Jika Anda hanya mendorong ke tumpukan menggunakan koneksi papan cerita, ini akan berfungsi; tetapi tampaknya jika Anda mendorong melalui kode entah bagaimana,
navigationController
properti yang didorongUIViewController
akan menjadinil
dan ketika Anda memanggilnyaShow
akan menganggapnya sebagai modal karena tidak ada navigasi untuk mengontrol tumpukan.Satu-satunya solusi sejauh ini adalah tidak mendorong melalui kode (tidak layak) atau menggunakan yang sekarang sudah usang
Push
.Saya mengajukan radar (tautan di artikel). Jangan ragu untuk mengajukan duplikat dengan harapan Apple memperbaiki masalah ini.
sumber
Show
segue, lalu padaShow
segue kedua disajikan secara sederhana, Solusi?Show
viewController di iOS 7Saya memiliki masalah yang sama dengan segues di Xcode 7 dan iOS 7.1.2. Show segues (fitur baru dari iOS 8) berfungsi seperti modal segues di iOS 7 dan tidak memungkinkan Anda untuk mendorong View Controllers ke dalam stack Pengontrol Navigasi saat Anda menentukan jenis segue dengan Xcode di Storyboard Anda. Itulah mengapa self.navigationController Anda akan mengembalikan nihil, karena Pengontrol Tampilan tidak didorong ke tumpukan dan Anda tidak dapat memunculkannya.
Saya tidak mengerti mengapa Apple tidak menambahkan pemberitahuan apa pun untuk kasus ini di Xcode ketika Anda membutuhkan aplikasi Anda untuk bekerja di iOS 7. Mereka mengatakan bahwa metode Push tidak digunakan lagi, tetapi Show tidak bekerja dengan benar dengan iOS 7.
Apa yang telah saya lakukan untuk mengatasi masalah tersebut:
Saya telah membuat kelas MYShowSegue dengan .h
Dan file .m dengan hanya satu metode perform :
Daripada Anda perlu mengatur jenis Kustom untuk setiap segmen di Storyboard Anda dan memilih kelas baru untuknya, dalam kasus saya itu adalah MYShowSegue.
Contoh Segue Ubahsuaian
Solusi ini akan membantu Anda mendapatkan dukungan penuh untuk aplikasi iOS 7 Anda, mereka akan menggunakan metode pushViewController untuk mendorong Tampilan Anda dan untuk iOS 8,9 dll. Segue Anda akan bekerja dengan metode baru (iOS 8) showViewController
Jangan lupa untuk melakukan hal yang sama dengan semua segmen Anda di Storyboard.
sumber
Ini masih terjadi di iOS 10.x
Menghapus dan memasang kembali segmen tidak menyelesaikan apa pun untuk saya:
Masalah: Fungsionalitas yang dibutuhkan adalah 7 segues yang hanya beroperasi sebagai 'push' (sebenarnya adalah detail pertunjukan) tetapi sebenarnya hanya segue pertama yang saya tambahkan yang akan mendorong, yang lain semua akan berperilaku sederhana. Ini meskipun Interface Builder mendeskripsikan setiap segmen secara identik.
Solusi: Saya harus menambahkan tindakan ke 6 segues yang tidak memilikinya.
XML Papan Cerita Asli
Saya mengubah ini dengan menambahkan showViewController: sender
sumber