我正在开发一个使用故事板的现有应用程序,但我想继续开发而不使用故事板或 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 )
var navigationController: UINavigationController?
视图控制器层次结构中最近的祖先是导航控制器。
这意味着当您调用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] 删除。
我来说两句