Saya ingin mengatur viewcontroller awal dari appdelegate. Saya menemukan jawaban yang sangat bagus, tetapi ada di Objective C dan saya kesulitan mencapai hal yang sama dengan cepat.
Secara terprogram mengatur pengontrol tampilan awal menggunakan Storyboard
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *viewController = // determine the initial view controller here and instantiate it with [storyboard instantiateViewControllerWithIdentifier:<storyboard id>];
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
return YES;
}
Adakah yang bisa membantu?
Saya ingin Viewcontroller awal bergantung pada kondisi tertentu yang dipenuhi menggunakan pernyataan kondisional.
Jawaban:
Saya menggunakan utas ini untuk membantu saya mengonversi obyektif C menjadi cepat, dan berfungsi dengan sempurna.
Instantiate dan Presentasikan viewController di Swift
Kode Swift 2 :
Kode Swift 3 :
sumber
UIWindow
dan mengatur pengontrol tampilan root-nya secara terprogram.Coba ini. Misalnya: Anda harus menggunakan
UINavigationController
pengontrol tampilan awal. Lalu, Anda bisa mengatur view controller sebagai root dari storyboard.Lihat layar storyboard saya.
sumber
Untuk Swift 3, Swift 4:
Instantiate controller tampilan root dari storyboard:
Jika Anda ingin menggunakan
UINavigationController
sebagai root:Instantiate controller tampilan root dari xib:
Ini hampir sama, tetapi bukannya garis
Anda harus menulis
sumber
jika Anda tidak menggunakan storyboard, Anda dapat mencoba ini
sumber
Untuk Xcode 11.xxx dan Swift 5.xx baru, di mana targetnya diatur ke iOS 13+.
Untuk struktur proyek baru, AppDelegate tidak perlu melakukan apa pun mengenai rootViewController.
Kelas baru ada di sana untuk menangani kelas window (UIWindowScene) -> file 'SceneDelegate'.
sumber
Ini cara yang bagus untuk mendekatinya. Contoh ini menempatkan pengontrol navigasi sebagai pengontrol tampilan root, dan menempatkan pengontrol tampilan pilihan Anda di dalamnya di bagian bawah tumpukan navigasi, siap untuk Anda mendorong apa pun yang Anda butuhkan darinya.
Untuk membuat contoh ini berfungsi, Anda akan mengatur "MainViewController" sebagai Storyboard ID pada pengontrol tampilan utama Anda, dan nama file storyboard dalam kasus ini adalah "MainStoryboard.storyboard". Saya mengubah nama storyboard saya dengan cara ini karena Main.storyboard bagi saya bukanlah nama yang tepat, terutama jika Anda pernah pergi untuk subklas itu.
sumber
Saya telah melakukannya dengan objektif-c harap ini akan berguna bagi Anda
sumber
Kode untuk kode Swift 4.2 dan 5:
Dan untuk
Xcode 11+
and for Swift 5+
:sumber
var window: UIWindow?
.And for Xcode 11+ and for Swift 5+
bagian banyak membantu saya. Terima kasihSaya sudah melakukannya di Xcode 8 dan cepat 3.0 berharap ini akan berguna bagi Anda, dan ini bekerja dengan sempurna. Gunakan kode berikut:
Dan Jika Anda menggunakan pengontrol navigasi, maka gunakan kode berikut untuk itu:
sumber
Swift 4:
Tambahkan baris-baris ini di dalam AppDelegate.swift, di dalam fungsi didFinishLaunchingWithOptions () ...
Sekarang, misalnya, sering kali kita melakukan sesuatu seperti ini ketika kita ingin mengarahkan pengguna ke layar masuk atau ke layar pengaturan awall atau kembali ke layar utama aplikasi, dll. Jika Anda ingin melakukan sesuatu seperti itu juga , Anda dapat menggunakan titik ini sebagai fork-in-the-road untuk itu.
Pikirkan tentang itu. Anda bisa memiliki nilai yang disimpan di NSUserDefaults misalnya yang dimiliki oleh userLoggedIn Boolean dan
if userLoggedIn == false { use this storyboard & initialViewController... } else { use this storyboard & initialViewController... }
sumber
Yah semua jawaban di atas / di bawah ini menghasilkan peringatan tentang tidak ada titik masuk di storyboard.
Jika Anda ingin memiliki 2 (atau lebih) pengendali tampilan entri yang bergantung pada beberapa kondisi (katakanlah conditionVariable ) maka yang harus Anda lakukan adalah:
Gunakan kode selanjutnya:
Semoga ini membantu.
sumber
Jika Anda tidak menggunakan storyboard. Anda dapat menginisialisasi pengontrol tampilan utama Anda secara terprogram.
Cepat 4
Dan juga hapus
Main
dari Info Penerapan .sumber
Inilah Solusi lengkap di Swift 4 untuk mengimplementasikannya di didFinishLaunchingWithOptions
tulis Fungsi ini di mana saja di dalam Appdelegate.swift
sumber
Untuk berjaga-jaga jika Anda ingin melakukannya di view controller dan bukan di delegate app: Cukup ambil referensi ke AppDelegate di view controller Anda dan setel ulang objek window itu dengan view controller kanan karena itu rootviewController.
sumber
Untuk swift 4.0 .
Dalam file AppDelegate.swift Anda di metode didfinishedlaunchingWithOptions , masukkan kode berikut.
Semoga ini akan bekerja dengan baik.
sumber
Swift 5 & Xcode 11
Jadi di xCode 11 solusi window tidak lagi valid di dalam appDelegate. Mereka memindahkan ini ke SceneDelgate. Anda dapat menemukannya di file SceneDelgate.swift.
Anda akan melihat sekarang ada
var window: UIWindow?
hadiah.Dalam situasi saya, saya menggunakan TabBarController dari storyboard dan ingin mengaturnya sebagai rootViewController.
Ini kode saya:
sceneDelegate.swift
Pastikan untuk menambahkan ini ke metode adegan yang benar seperti yang saya lakukan di sini. Perhatikan bahwa Anda perlu mengatur nama pengenal untuk tabBarController atau viewController yang Anda gunakan di storyboard.
Dalam kasus saya, saya melakukan ini untuk mengatur stateController untuk melacak variabel yang dibagi di antara tampilan tab. Jika Anda ingin melakukan hal yang sama, tambahkan kode berikut ...
StateController.swift
Catatan: Cukup gunakan variabel Anda sendiri atau apa pun yang Anda coba untuk melacaknya, saya hanya mendaftarkan milik saya sebagai contoh di tdfvariables struct.
Di setiap tampilan TabController tambahkan variabel anggota berikut.
Kemudian pada file-file yang sama tambahkan berikut ini:
Apa yang dilakukan adalah memungkinkan Anda untuk menghindari pendekatan tunggal untuk melewatkan variabel di antara tampilan. Hal ini memungkinkan dengan mudah untuk model injeksi ketergantungan yang jauh lebih baik daripada pendekatan tunggal.
sumber
Nonaktifkan
Main.storyboard
Tambahkan ID Storyboard
Swift 5 dan Xcode 11
Memperpanjang
UIWindow
Edit yang dihasilkan oleh Xcode
SceneDelegate.swift
sumber
sumber
sumber
Buka viewcontroller dengan SWRevealViewController From App delegate.
sumber
Untuk Swift 5+
sumber