首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Swift -在App Delegate中实例化不带故事板的导航控制器

Swift -在App Delegate中实例化不带故事板的导航控制器
EN

Stack Overflow用户
提问于 2015-06-21 00:43:15
回答 2查看 45K关注 0票数 29

我正在重建一个没有故事板的应用程序,其中我遇到最大麻烦的部分是以编程方式导航视图到视图。很少有东西不使用故事板,所以很难找到这个问题的答案。

我的问题很简单。我有我的ViewControllerSecondViewController,我想从前者推向后者。

AppDelegate

代码语言:javascript
复制
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.

    window = UIWindow(frame: UIScreen.mainScreen().bounds)
    window?.backgroundColor = UIColor.whiteColor()
    window?.rootViewController = ViewController()
    window?.makeKeyAndVisible()

    return true
}

然后在ViewController.swift

代码语言:javascript
复制
class ViewController: UIViewController, AVAudioPlayerDelegate, UITextFieldDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        startFinishButton.setTitle("Begin", forState: .Normal)
        startFinishButton.addTarget(self, action: "moveToSecondViewController", forControlEvents: .TouchUpInside)
        view.addSubview <*> startFinishButton
    }

    func moveToSecondViewController(sender: UIButton) {
        let vc = SecondViewController()
        println(self.navigationController) // returns nil
        self.navigationController?.pushViewController(vc, animated: true)
    }
}

打印self.navigationController返回nil。我试过这样做:

在创建ViewController类时使用var navController = UINavigationController() (但在ViewDidLoad外部的类声明下面),并使用navController变量完成推送,但这并不起作用。

我在想,也许解决方案是在App Delegate中创建一个导航控制器,我猜整个应用程序都会使用它作为全局变量?

我希望这篇文章可以服务于许多其他刚接触Swift并希望从他们的应用程序中删除故事板的人。

感谢您的关注和帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-12 15:11:02

Swift 3中的

将此代码放在AppDelegate类的didFinishLaunchingWithOptions方法中。

代码语言:javascript
复制
window = UIWindow(frame: UIScreen.main.bounds)
let mainController = MainViewController() as UIViewController
let navigationController = UINavigationController(rootViewController: mainController)
navigationController.navigationBar.isTranslucent = false
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
票数 43
EN

Stack Overflow用户

发布于 2015-06-21 00:51:40

AppDelegate中的

代码语言:javascript
复制
var window: UIWindow?
var navController: UINavigationController?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    navController = UINavigationController()
    var viewController: ViewController = ViewController()
    self.navController!.pushViewController(viewController, animated: false)

    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    self.window!.rootViewController = navController

    self.window!.backgroundColor = UIColor.whiteColor()

    self.window!.makeKeyAndVisible()

    return true
}

ViewController中的

代码语言:javascript
复制
class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "FirstVC"

    var startFinishButton = UIButton.buttonWithType(UIButtonType.System) as! UIButton
    startFinishButton.frame = CGRectMake(100, 100, 100, 50)
    startFinishButton.backgroundColor = UIColor.greenColor()
    startFinishButton.setTitle("Test Button", forState: UIControlState.Normal)
    startFinishButton.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)

    self.view.addSubview(startFinishButton)
}

func buttonAction(sender:UIButton!)
{
    println("Button tapped")
    let vc = SecondViewController()
    self.navigationController?.pushViewController(vc, animated: true)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30956476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档