Membuat proyek baru di XCode 6 tidak memungkinkan untuk menonaktifkan Storyboards. Anda hanya dapat memilih Swift atau Objective-C dan menggunakan atau tidak Core Data.
Saya mencoba menghapus storyboard dan dari proyek menghapus storyboard utama dan secara manual mengatur jendela dari didFinishLaunching
Di AppDelegate saya punya ini:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow
var testNavigationController: UINavigationController
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
testNavigationController = UINavigationController()
var testViewController: UIViewController = UIViewController()
self.testNavigationController.pushViewController(testViewController, animated: false)
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window.rootViewController = testNavigationController
self.window.backgroundColor = UIColor.whiteColor()
self.window.makeKeyAndVisible()
return true
}
}
Namun, XCode memberi saya kesalahan:
Kelas 'AppDelegate' tidak memiliki penginisialisasi
Ada yang berhasil dalam hal ini?
Jawaban:
Anda harus menandai variabel
window
dantestNavigationController
sebagai opsional:Kelas Swift memerlukan properti non-opsional untuk diinisialisasi selama pembuatan instance:
Saat menggunakan variabel opsional, ingatlah untuk membukanya dengan
!
, seperti:sumber
AppDelegate
(kecuali jika memiliki nilai selama inisialisasi, atau diselesaikan dengan malas). Jika Anda menyimpan properti opsional dan Anda yakin tidaknil
, Anda "membukanya dari opsionalitas" menggunakan!
operator.!
..white
?Semua yang diperlukan untuk tidak menggunakan Papan Cerita untuk
rootViewController
:1 · Ubah
AppDelegate.swift
ke:2 · Buat
ViewController
subclass dariUIViewController
:3 · Jika Anda membuat proyek dari template Xcode:
"Main storyboard file base name"
dariInfo.plist
.Main.storyboard
.Seperti yang Anda lihat di cuplikan kode pertama, alih-alih secara implisit membuka bungkus opsional, saya lebih suka
if let
sintaks untuk membuka bungkuswindow
properti opsional . Di sini saya menggunakannyaif let a = a { }
sedemikian rupa sehingga opsionala
menjadi referensi non-opsional di dalamif
-statement dengan nama yang sama -a
.Akhirnya
self.
tidak diperlukan saat mereferensikanwindow
properti di dalam kelasnya sendiri.sumber
if let window = window {
? Saya menemukan jawabannya! Jadi Anda tidak perlu menggunakanwindow!
setiap saat.if let a = a {}
.makeKeyAndVisible()
menjadi setelah pengaturanrootViewController
. Jika tidak, Anda akan mendapatkan peringatan tentang bagaimana jendela diharapkan memiliki pengontrol tampilan root di akhir peluncuran aplikasi.if let a = a { }
terlihat aneh. Apakah Anda yakin tidak masalah menggunakan nama variabel yang sama untuk referensi non-opsional? Apple selalu menggunakan nama yang berbeda di dokumen Swift mereka. Juga, mengapa ini lebih baik daripada hanya digunakanwindow!
setiap saat?if let a = a { }
baik-baik saja. Anda bisa menggunakannyaif let anA = a { }
jika itu membuat Anda merasa lebih nyaman. 2.window!
adalah pemeriksaan runtime karena Anda secara eksplisit membuka bungkusan opsional. Saya suka pemeriksaan waktu kompilasi yang disediakan Swift kepada kita, jadi mengapa tidak menggunakannya.Jika Anda ingin menginisialisasi viewController Anda dengan xib dan dan perlu menggunakan pengontrol navigasi. Ini adalah potongan kode.
sumber
Coba kode berikut:
sumber
Saya telah menemukan jawabannya tidak ada hubungannya dengan pengaturan xcode, menghapus storyboard dan referensi dari proyek adalah hal yang benar. Itu ada hubungannya dengan sintaks cepat.
Kodenya adalah sebagai berikut:
sumber
Anda bisa melakukannya seperti ini:
sumber
Saya sarankan Anda menggunakan pengontrol dan xib
MyViewController.swift
danMyViewController.xib
(Anda dapat membuat melalui File-> New-> File-> Cocoa Touch Class dan mengatur "juga membuat file XIB" menjadi benar, sub kelas UIViewController)
dan Di
AppDelegate.swift
func application
tulis kode berikutSeharusnya itu berhasil!
sumber
Diperbarui untuk Swift 3.0:
sumber
Pembaruan: Swift 5 dan iOS 13:
Info.plist
file:SceneDelegate.swift
dan ubahfunc scene
dari:untuk
sumber
Berikut adalah contoh uji cepat lengkap untuk UINavigationController
sumber
Mengapa Anda tidak membuat aplikasi kosong saja? storyboard tidak dibuat untuk saya ...
sumber
Kita bisa membuat aplikasi berbasis navigasi tanpa storyboard di Xcode 6 (iOS 8) seperti berikut:
Buat aplikasi kosong dengan memilih bahasa proyek sebagai Swift.
Tambahkan file kelas cocoa touch baru dengan antarmuka xib. (mis. TestViewController)
Dalam swift kita hanya memiliki satu file yang berinteraksi dengan file xib yaitu * .swift, tidak ada file .h dan .m.
Kami dapat menghubungkan kontrol xib dengan file swift yang sama seperti di iOS 7.
Berikut adalah beberapa cuplikan untuk bekerja dengan kontrol dan Swift
Perubahan pada file AppDelegate.swift
Temukan contoh kode dan informasi lainnya di http://ashishkakkad.wordpress.com/2014/06/16/create-a-application-in-xcode-6-ios-8-without-storyborard-in-swift-language-and -bekerja dengan-kontrol /
sumber
Di iOS 13 dan lebih tinggi saat Anda membuat proyek baru tanpa storyboard gunakan langkah-langkah di bawah ini:
Buat proyek menggunakan Xcode 11 atau lebih tinggi
Hapus ujung papan cerita dan kelas
Tambahkan file baru dengan xib
Perlu menyetel tampilan root sebagai UINavigationController SceneDelegate
tambahkan kode di bawah func scene (_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {// Gunakan metode ini untuk mengkonfigurasi dan melampirkan UIWindow
window
ke UIWindowScene yang disediakanscene
. // Jika menggunakan storyboard,window
properti secara otomatis akan diinisialisasi dan dilampirkan ke adegan. // Delegasi ini tidak menyiratkan bahwa adegan atau sesi penghubung adalah baru (lihatapplication:configurationForConnectingSceneSession
saja). // guard let _ = (scene sebagai? UIWindowScene) else {return}jika biarkan windowScene = scene sebagai? UIWindowScene {self.window = UIWindow (windowScene: windowScene) biarkan mainController = HomeViewController () sebagai HomeViewController biarkan navigationController = UINavigationController (rootViewController: mainController) self.window! .RootViewController = navigationController self.window! .MakeKeyAnd}
sumber