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

马克霍洛克斯

我正在开发一个使用故事板的现有应用程序,但我想继续开发而不使用故事板或 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?

......

   let myViewController = myViewController()

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

UIViewController文档

var navigation​Controller:​ UINavigation​Controller?
视图控制器层次结构中最近的祖先是导航控制器。

这意味着当您调用self.navigationController视图控制器时,您将获得self嵌入的(最近的)导航控制器。显然,您的菜单控制器未嵌入导航控制器层次结构中。使用您的应用程序委托的navController成员是完成这项工作的一种方法。然后你可以在你的菜单视图控制器中说:

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

application(_:didFinishLaunchingWithOptions:)

...
let menuViewController = MenuViewController(...)
menuViewController.navController = navController

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

UINavigationController在Swift 3中为零

Swift-UINavigationController条形颜色不会以编程方式更改

隐藏嵌入式UINavigationController swift3后退按钮

Swift 3 - 向 UINavigationController 子类添加导航项

使用Swift 3和Cocoa以编程方式创建菜单

Swift 3使用UINavBar按钮显示以编程方式创建的datePicker

使用Swift for iOS以编程方式创建和存储PDF文档

Swift中的UINavigationController

UINavigationController 返回 nil Swift

在Swift 3中以编程方式使用ScrollView

在iOS中以编程方式创建UINavigationController

UISwitch:Swift 3:以编程方式

Swift 3-覆盖UINavigationController的初始化程序以设置rootviewcontroller

Swift 3以编程方式创建UILabel并添加NSLayoutConstraints

带有大标题的以编程方式创建的UINavigationController属于UIStatusBar

使用UINavigationController关闭UIPopoverController

如何在iOS Swift中使用Xib将UINavigationController设置为rootviewcontroller?

以编程方式截图| Swift 3,macOS

Swift 3 UIPickerView以编程方式开始旋转

Swift 3以编程方式绘制uiimage

使用CoreData以编程方式创建实体/表,并在iOS的Swift 3中将值插入该实体

如何以编程方式打开我的UINavigationController?

在Swift中投射从UINavigationController中提取的viewController

如何使用Swift以编程方式创建UILabel?

在Swift 3中以编程方式创建一个没有XIB的NSViewController

在 Swift 3 中以编程方式创建的 UISlider 中未触发事件

尝试以编程方式创建多维数组

结合使用UISearchController和UINavigationController

以编程方式创建NavigationController(Swift)