Criar um novo projeto no XCode 6 não permite desabilitar Storyboards. Você só pode selecionar Swift ou Objective-C e usar ou não Core Data.
Tentei deletar o storyboard e do projeto removendo o storyboard principal e configurando manualmente a janela em didFinishLaunching
No AppDelegate, tenho o seguinte:
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
}
}
No entanto, o XCode me dá um erro:
A classe 'AppDelegate' não tem inicializadores
Alguém conseguiu isso?
Respostas:
Você deve marcar as variáveis
window
etestNavigationController
como opcionais:As classes Swift requerem que propriedades não opcionais sejam inicializadas durante a instanciação:
Ao usar variáveis opcionais, lembre-se de desembrulhá-las com
!
, como:fonte
AppDelegate
(a menos que tenha um valor durante a inicialização ou seja resolvido lentamente). Se você armazenar uma propriedade opcional e tiver certeza de que não énil
, "desembrulhe-a de sua opcionalidade" usando o!
operador.!
..white
?Basta não usar Storyboards para
rootViewController
:1 · Mude
AppDelegate.swift
para:2 · Crie uma
ViewController
subclasse deUIViewController
:3. Se você criou o projeto a partir de um modelo Xcode:
"Main storyboard file base name"
deInfo.plist
.Main.storyboard
.Como você pode ver no primeiro fragmento de código, em vez de desembrulhar implicitamente um opcional, prefiro a
if let
sintaxe para desembrulhar awindow
propriedade opcional . Aqui, estou usando-oif let a = a { }
para que o opcionala
se torne uma referência não opcional dentro daif
instrução -com o mesmo nome -a
.Finalmente,
self.
não é necessário ao fazer referência àwindow
propriedade dentro de sua própria classe.fonte
if let window = window {
? Eu descobri! É assim que você não precisa usarwindow!
todas as vezes.if let a = a {}
.makeKeyAndVisible()
ser , após ajusterootViewController
. Caso contrário, você receberá um aviso sobre como se espera que a janela tenha um controlador de visualização raiz no final da inicialização do aplicativo.if let a = a { }
Parece estranho. Tem certeza de que pode usar o mesmo nome de variável para a referência não opcional? A Apple sempre usa nomes diferentes em seus documentos Swift. Além disso, por que isso é melhor do que apenas usarwindow!
sempre?if let a = a { }
está perfeitamente bem. Você pode usarif let anA = a { }
se sentir mais confortável. 2.window!
é uma verificação de tempo de execução, já que você desdobra explicitamente um opcional. Eu gosto das verificações de tempo de compilação que o Swift nos fornece, então por que não usá-lo.Se você deseja inicializar seu viewController com xib e precisa usar o controlador de navegação. Aqui está um trecho de código.
fonte
Experimente o seguinte código:
fonte
Eu encontrei a resposta que não tinha nada a ver com a configuração do xcode, remover o storyboard e a referência do projeto é a coisa certa. Tinha a ver com a sintaxe rápida.
O código é o seguinte:
fonte
Você pode fazer assim:
fonte
Eu recomendo que você use controlador e xib
MyViewController.swift
eMyViewController.xib
(Você pode criar através de Arquivo-> Novo-> Arquivo-> Classe Cocoa Touch e definir "também criar arquivo XIB" true, subclasse de UIViewController)
e em
AppDelegate.swift
func application
escrever o seguinte códigoDeve dar certo!
fonte
Atualizado para Swift 3.0:
fonte
Atualização: Swift 5 e iOS 13:
Info.plist
arquivo:SceneDelegate.swift
e mudefunc scene
de:para
fonte
Aqui está um exemplo de teste rápido completo para um UINavigationController
fonte
Por que você simplesmente não cria um aplicativo vazio? o storyboard não foi criado para mim ...
fonte
Podemos criar aplicativos baseados em navegação sem storyboard no Xcode 6 (iOS 8) da seguinte maneira:
Crie um aplicativo vazio selecionando o idioma do projeto como Swift.
Adicione novos arquivos de classe de toque cacau com a interface xib. (por exemplo, TestViewController)
No swift, temos apenas um arquivo interagindo com o xib, ou seja, arquivo * .swift, não há arquivos .h e .m.
Podemos conectar os controles do xib com o arquivo swift mesmo que no iOS 7.
A seguir estão alguns trechos para trabalhar com os controles e Swift
Alterações no arquivo AppDelegate.swift
Encontre amostra de código e outras informações em http://ashishkakkad.wordpress.com/2014/06/16/create-a-application-in-xcode-6-ios-8-without-storyborard-in-swift-language-and -trabalho-com-controles /
fonte
No iOS 13 e superior, ao criar um novo projeto sem storyboard, use as etapas abaixo:
Crie um projeto usando o Xcode 11 ou superior
Excluir a ponta e a classe do storyboard
Adicionar novo arquivo com o xib
É necessário definir a visualização raiz como UINavigationController SceneDelegate
adicionar abaixo o código func scene (_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {// Use este método para configurar opcionalmente e anexar o UIWindow
window
ao UIWindowScene fornecidoscene
. // Se estiver usando um storyboard, awindow
propriedade será inicializada automaticamente e anexada à cena. // Este delegado não implica que a cena ou sessão de conexão sejam novas (veja aoapplication:configurationForConnectingSceneSession
invés). // guarda let _ = (cena como? UIWindowScene) else {return}se deixar windowScene = scene como? UIWindowScene {self.window = UIWindow (windowScene: windowScene) let mainController = HomeViewController () as HomeViewController let navigationController = UINavigationController (rootViewController: mainController) self.window! .RootViewController = navigationController self.window}.
fonte