当前位置: 首页 > 面试题库 >

Swift –在App Delegate中实例化没有情节提要的导航控制器

齐锐进
2023-03-14
问题内容

我正在重建没有情节提要的应用程序,而我遇到最大麻烦的部分是以编程方式浏览视图到视图。很少有东西不用情节提要写出来,因此很难找到答案。

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

AppDelegate

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

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返回零。我试着做:

var navController = UINavigationController()ViewController创建类时(但在ViewDidLoad外部,在类声明的正下方),并使用navControllervar
完成了推送,但这没有用。

我在想,也许解决方案是在App Delegate中创建整个应用程序都将使用的导航控制器,我想这是一个全局变量吗?

我希望这篇文章可以为许多其他Swift初学者并希望从其应用中删除情节提要的用户提供服务。

感谢您的光临和帮助。


问题答案:

在Swift 3中

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

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()


 类似资料:
  • 问题内容: 我正在用Swift开发iOS应用程序。 我想使用prepareForSegue函数将数据从视图发送到另一个视图。 但是,我的目标视图之前是导航控制器,因此它不起作用。 请问我该怎么做? 问题答案: 在访问目标导航控制器,然后在其顶部: 您可以从目标控制器访问其视图并传递数据。 在旧版本(现在已过时)的Swift和UIKit版本中,代码略有不同:

  • 问题内容: 尝试从情节提要中自定义实例化窗口控制器时,我得到的感觉像是个错误。我正在使用NSStoryboard.instantiateController(identifier:creator:),这是MacOS 10.15中的新功能。有问题的代码块是: 我已经成功地将这个确切的代码用于自定义实例化主 视图 控制器,并将该视图分配给一个新窗口和一个新窗口控制器。很好 我还可以使用老式方法实例化

  • 问题内容: 我在位于Xcode中两个不同.storyboard文件内的两个不同UIViewControllers之间传递数据。(这是一个很大的项目,因此我不得不将其分解为不同的故事板。) 我已经在要向其传递数据的视图中建立了一个“ exercisePassed”变量(字符串),而且我已经知道如何在位于不同情节提要中的两个视图之间移动。像这样 如何不使用Segue / PrepareForSegue

  • 问题内容: 当用户单击UILocalNotification时,我试图迅速从应用程序委托中加载特定的ViewController。我已经知道这是在此函数中调用的: 但是当我尝试访问一个打开的ViewController时,我认为它返回null,因为我的应用程序崩溃了。这是我正在尝试的: 在popToViewController行上崩溃了。 问题答案: 您可以尝试: 斯威夫特3:

  • 问题内容: 我有两个不同的故事板: 主板:SWrevealViewController(应用程序的主要部分) Loginstoryboard:登录/注册控制器 当用户未登录或注销时,应使用Loginstoryboard。然后应该对Mainstoryboard进行设置。 如何迅速实施? 期待您的回答! 一月 问题答案: 您是否尝试切换您在 假设您有: 要在登录后切换视图控制器,您可以执行以下操作:

  • 我正在制作应用程序与视频播放器在它和我的整个结构是为只有肖像视图,除了这个视频播放器。我只想为这个视图启用景观旋转。但是我在很多论坛上做了很多文章,每一篇文章都是为了给App Delegate添加一些代码,但是我没有。那我能做什么。