Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift3 Swift 3试图以编程方式创建和使用UINavigationController_Swift3_Uinavigationcontroller - Fatal编程技术网

Swift3 Swift 3试图以编程方式创建和使用UINavigationController

Swift3 Swift 3试图以编程方式创建和使用UINavigationController,swift3,uinavigationcontroller,Swift3,Uinavigationcontroller,我正在开发一个使用故事板的现有应用程序,但我想继续开发而不使用故事板或nib文件 现有的左侧菜单是一个UITableView,它不是根控制器,也没有与其关联的导航控制器。我已在应用程序委托中创建了一个UINavigationController,并希望使用此导航控制器推送一个新的控制器。我可以展示一个视图控制器,但我想使用push来符合当前的UIX 在下面的代码中,由于navigationController?返回nil,因此不会发生任何事情 这是我在应用程序委托中的新代码 @UIApplica

我正在开发一个使用故事板的现有应用程序,但我想继续开发而不使用故事板或nib文件

现有的左侧菜单是一个
UITableView
,它不是根控制器,也没有与其关联的导航控制器。我已在应用程序委托中创建了一个
UINavigationController
,并希望使用此导航控制器推送一个新的控制器。我可以展示一个视图控制器,但我想使用push来符合当前的UIX

在下面的代码中,由于
navigationController?
返回nil,因此不会发生任何事情

这是我在应用程序委托中的新代码

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

var navController: UINavigationController?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    navController = UINavigationController()

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

    self.window!.rootViewController = navController

    self.window!.backgroundColor = .red

    self.window!.makeKeyAndVisible()

    let menuViewController = SideMenuViewController()

    menuViewController.navController = navController
然后在我的侧菜单控制器中:

import UIKit

class SideMenuViewController: UIViewController {

var navController: UINavigationController?
func menuItemFooSelected()
{
    let navController = (UIApplication.shared.delegate as! AppDelegate).navController
    let myViewController = myViewController()
    navController?.pushViewController(myViewController, animated: true)
}
class MenuViewController: UIViewController
{
    var navController: UINavigationController?
    ...

    func menuItemFooSelected()
    {
        let myViewController = myViewController()
        self.navController?.pushViewController(myViewController, animated: true)
    }
}

   let myViewController = myViewController()

   self.navigationController?.pushViewController(myViewController, animated: true )
从:

var导航​控制器:​ 航空​控制器?

最近的 视图控制器层次结构中作为导航的祖先 控制器

这意味着当您在视图控制器中调用
self.navigationController
时,您将得到嵌入
self
的(最近的)导航控制器。显然,菜单控制器未嵌入导航控制器层次结构中。使用应用程序代理的
navController
成员是实现此功能的一种方法。然后,您可以在菜单视图控制器中说:

import UIKit

class SideMenuViewController: UIViewController {

var navController: UINavigationController?
func menuItemFooSelected()
{
    let navController = (UIApplication.shared.delegate as! AppDelegate).navController
    let myViewController = myViewController()
    navController?.pushViewController(myViewController, animated: true)
}
class MenuViewController: UIViewController
{
    var navController: UINavigationController?
    ...

    func menuItemFooSelected()
    {
        let myViewController = myViewController()
        self.navController?.pushViewController(myViewController, animated: true)
    }
}
或者(可能更好),当您在应用程序代理中设置初始结构时,将导航控制器插入侧菜单控制器:

import UIKit

class SideMenuViewController: UIViewController {

var navController: UINavigationController?
func menuItemFooSelected()
{
    let navController = (UIApplication.shared.delegate as! AppDelegate).navController
    let myViewController = myViewController()
    navController?.pushViewController(myViewController, animated: true)
}
class MenuViewController: UIViewController
{
    var navController: UINavigationController?
    ...

    func menuItemFooSelected()
    {
        let myViewController = myViewController()
        self.navController?.pushViewController(myViewController, animated: true)
    }
}
在<代码>应用程序中(ux0:didFinishLaunchingWithOptions:)


我有一个打字错误,但它什么也没做。线路是否允许导航控制器。。。进入应用程序代理?我不明白虚线中的内容,我需要在许多视图控制器中使用它。点代表如何创建菜单视图控制器,因为我不知道您使用的初始值设定项。重要的部分是将
navController
属性添加到菜单视图控制器,并将其设置为在应用程序代理中创建的导航控制器。您只需对菜单视图控制器执行一次,然后就可以从该菜单视图控制器中推送任何您喜欢的视图控制器澄清问题所在。我更新了我的问题,以显示我相信您发布的内容,但仍然没有出错。我只是看到您没有使用
UINavigationController
的指定初始值设定项之一,例如
init(root​看法​控制器:​)