Bagaimana cara saya mengatur InitialViewController
untuk Storyboard? Saya ingin membuka storyboard saya ke tampilan yang berbeda tergantung pada beberapa kondisi yang mungkin berbeda dari peluncuran ke peluncuran.
252
Bagaimana cara saya mengatur InitialViewController
untuk Storyboard? Saya ingin membuka storyboard saya ke tampilan yang berbeda tergantung pada beberapa kondisi yang mungkin berbeda dari peluncuran ke peluncuran.
Jawaban:
Cara tanpa kontroler tampilan awal dummy
Pastikan semua pengendali tampilan awal memiliki ID Storyboard.
Di storyboard, hapus centang atribut "Apakah pengendali tampilan awal" dari pengendali tampilan pertama.
Jika Anda menjalankan aplikasi pada titik ini, Anda akan membaca:
Dan Anda akan melihat bahwa properti jendela Anda di delegasi aplikasi sekarang nihil.
Dalam pengaturan aplikasi, buka target dan
Info
tab Anda. Jelas ada nilaiMain storyboard file base name
. PadaGeneral
tab, kosongkan nilainya untukMain Interface
. Ini akan menghapus peringatan.Buat jendela dan pengontrol tampilan awal yang diinginkan dalam metode delegasi aplikasi
application:didFinishLaunchingWithOptions:
:sumber
didFinishLaunchingWithOptions
dipanggil saat aplikasi dimulai dalam proses baru. Jika Anda membuka layar beranda dan kembali ke aplikasi, metode ini tidak akan dipanggil lagi. (Kecuali iOS berakhir karena keterbatasan memori.) Coba hentikan aplikasi dan luncurkan sekali lagi dari IDE Anda. Jika masalah berlanjut, kirim masalah ke SO dan saya akan dengan senang hati membantu, teman.self.window = UIWindow(frame: UIScreen.mainScreen().bounds) var storyboard = UIStoryboard(name: "Main", bundle: nil) var viewController: UIViewController = // self.window!.rootViewController = viewController self.window!.makeKeyAndVisible()
Untuk semua pecinta Swift di luar sana, inilah jawabannya oleh @Travis yang diterjemahkan ke dalam SWIFT :
Lakukan apa yang @Travis jelaskan sebelum kode Objective C. Kemudian,
Itu
ExampleViewController
akan menjadi pengontrol tampilan awal baru yang ingin Anda tampilkan.Langkah-langkahnya menjelaskan:
Selamat menikmati dan pemrograman!
sumber
Anda dapat secara program mengatur rootViewController jendela kunci
(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
sebagai contoh:
sumber
init()
/deinit()
, tetapi tanpa mengeksekusiviewDidLoad()
atau menginisialisasiIBOutlet
-s dengan benar . Pastikan kode Anda siap untuk itu.Swift 3: Perbarui ke kode @ victor-sigler
sumber
Anda dapat mengatur Navigasi rootviewcontroller sebagai pengendali tampilan utama. Gagasan ini dapat digunakan untuk masuk otomatis sesuai kebutuhan aplikasi.
Untuk Pengguna StoryboardSegue
Terima kasih
sumber
Buka mainstoryboard, pilih tampilan yang ingin Anda mulai terlebih dahulu, lalu buka Utilities -> Attributes. Di bawah "View Controller" Anda melihat tombol radio "Is initial View Controller". Pilih saja.
--- Untuk pertanyaan yang direvisi:
Mungkin Anda dapat mencoba ini: menulis metode di bagian ViewDidLoad tampilan awal Anda dan ketika metode berjalan pada saat peluncuran aplikasi, metode memicu segue ke tampilan lain.
sumber
SWIFT 5
Jika Anda tidak memiliki set ViewController sebagai ViewController awal di storyboard, Anda perlu melakukan 2 hal:
Akhirnya, Anda sekarang dapat menambahkan kode Anda di SceneDelegate:
sumber
Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set
peringatan yang saya miliki setelah saya memutuskan untuk instantiate VC awal saya dalam kode. Poin penting, ketika @ rs7 mengatakan "hapus bidang nama storyboard", artinya seluruh baris plist, bukan hanya konten bidang itu sendiri.Saya pikir itu tidak mungkin. Sebagai gantinya, Anda dapat memiliki satu pengontrol awal yang akan memiliki segue untuk pengontrol tampilan yang berbeda. Saat memulai, Anda dapat memutuskan segmen mana yang akan tampil secara programatis.
sumber
Anda dapat mengatur
initial view controller
menggunakan Interface Builder dan juga secara terprogram.Di bawah ini adalah pendekatan yang digunakan untuk pemrograman.
Tujuan-C:
Cepat:
sumber
Saya membuat kelas perutean untuk menangani navigasi dinamis dan menjaga kelas AppDelegate tetap bersih, saya harap ini akan membantu lainnya juga.
Dan di AppDelegate Anda panggil ini
sumber
Solusi lain dengan menggunakan Swift 3 dan Swift 4 dengan menghindari casting gaya adalah seperti ini
Dan di bawah ini digunakan dengan
UINavigationController
sumber
Dalam
AppDelegate.swift
Anda dapat menambahkan kode berikut:Tentu saja, Anda perlu mengimplementasikan logika Anda, berdasarkan pada kriteria mana Anda akan memilih pengontrol tampilan yang sesuai.
Juga, jangan lupa untuk menambahkan identitas (pilih storyboard -> Scene Controller -> Tampilkan inspektur identitas -> assign StorboardID).
sumber
JAWABAN TERBARU untuk iOS 13 dan delegasi adegan:
pastikan dalam file info.plist Anda, Anda masuk ke Application Scene Manifest -> Scene Configuration -> Aplikasi Session Role -> Item 0 dan hapus referensi ke storyboard utama di sana juga. Kalau tidak, Anda akan mendapatkan peringatan yang sama tentang kegagalan instantiate dari storyboard.
Juga, pindahkan kode dari delegasi aplikasi ke adegan metode delegasi adegan (_: willConnectTo: options :), karena di sinilah peristiwa siklus hidup ditangani sekarang.
sumber
Beberapa hari yang lalu saya mengalami situasi yang sama. Trik yang sangat sederhana menyelesaikan masalah ini. Saya mengatur tersembunyi pengontrol tampilan awal saya sebelum launch2. Jika pengontrol tampilan awal adalah pengontrol yang tepat, pengaturannya akan terlihat di viewDidLoad. Lain, segue dilakukan untuk pengontrol tampilan yang diinginkan. Ini berfungsi sempurna di iOS 6.1 dan di atasnya. Saya yakin ini berfungsi pada versi iOS sebelumnya.
sumber
Terima kasih memodifikasi ini sebagai berikut di AppDelegate:
sumber
Ditemukan solusi sederhana - tidak perlu menghapus "pemeriksaan pengontrol tampilan awal" dari storyboard dan mengedit info proyek tab dan gunakan
makeKeyAndVisible
, cukup tempatkandi
sumber
rootVC
dariinstantiateViewControllerWithIdentifier
, benar?Cara lain adalah menyajikan viewController,
Pertama, Anda perlu membuat objek storyboard Anda kemudian mengubah root (jika diperlukan) maka Anda mengambil referensi pengontrol tampilan tertentu yang mendorong pengontrol tampilan saat ini (jika Anda mengubah root) lain itu hanya hadir pengontrol tampilan baru yang mungkin Anda
sumber
Swift 4, Xcode 9
dalam file AppDelegate.swift
sumber
sumber
Swift 5 atau di atas # buat pengendali tampilan rute dengan kode sederhana ini. Jika Anda menggunakan xcode 11 atau lebih, inisialisasi pertama
var window: UIWindow?
di AppDelegatesumber
Jika Anda memilih untuk tidak mengubah applicationDidFinish, Anda dapat melakukan trik berikut:
Atur pengontrol Navigasi sebagai pengontrol tampilan awal dan tetapkan untuk itu kelas khusus 'MyNavigationController'. Kemudian Anda dapat mengubah pengontrol tampilan root selama viewDidLoad - itu akan menimpa pengontrol tampilan root yang Anda atur di storyboard Anda.
sumber
Pilih pengontrol tampilan yang ingin Anda buka pertama dan pergi ke inspektur atribut. Pergi ke adegan awal dan periksa adalah opsi pengontrol tampilan awal.
Sekarang ini akan menjadi pengontrol tampilan awal Anda yang akan terbuka pertama saat aplikasi diluncurkan.
sumber