Swift - UINavigation Controller变为零
当我尝试推送另一个控制器时,我遇到了UINavigationController
问题。Swift - UINavigation Controller变为零
的AppDelegate
let testViewController:ProximityQuestionsIntroductionViewController = ProximityQuestionsIntroductionViewController();
self.navController = UINavigationController(rootViewController: testViewController);
self.window = UIWindow(frame: UIScreen.mainScreen().bounds);
self.window!.rootViewController = navController;
self.window!.backgroundColor = UIColor.whiteColor();
self.window!.makeKeyAndVisible();
return true
ProximityQuestionsIntroductionViewController
class ProximityQuestionsIntroductionViewController:UIViewController {
// Controls
var proximityIntroductionView:ProximityQuestionsIntroductionView!;
// Load components when the view is loaded
override func viewDidLoad() {
super.viewDidLoad();
print("nav in viewDidLoad : \(self.navigationController)");
//Hide Nav bar
self.navigationController?.navigationBarHidden = true;
// Set view
self.proximityIntroductionView = ProximityQuestionsIntroductionView(frame: self.view.frame);
self.view = self.proximityIntroductionView;
}
func start(){
print(self);
print("start in controller");
let nextController = ProximityQuestionsProgressViewController();
print("nav in start : \(self.navigationController)");
self.navigationController?.pushViewController(nextController, animated: true);
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
我打电话从一个按钮被按下时,我ProximityQuestionsIntroductionView
start
。 在日志中,我看到“导航在开始:无”,并且控制器不会更改。
欲了解更多信息:
自我是真正的
ProximityQuestionsIntroductionViewController
。导航栏真隐
所以导航控制器是viewDidLoad
确定,但不是在其他功能。
有人能告诉我为什么吗?
谢谢!
编辑:AppDelegate中
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = storyboard.instantiateViewControllerWithIdentifier("ProximityIntroduction");
self.navController = storyboard.instantiateViewControllerWithIdentifier("NavigationController") as! UINavigationController;
self.navController?.setViewControllers([initialViewController], animated: false)
self.window?.rootViewController = navController;
self.window?.makeKeyAndVisible();
我添加导航控制器到故事板并更改ID。但我仍然有对UINavigationController
一个nil
值的函数start
问题来自视图。
这样做:
// Set view
self.proximityIntroductionView = ProximityQuestionsIntroductionView(frame: self.view.frame);
self.view = self.proximityIntroductionView;
导致该问题。我不知道为什么,但将所有UIView放入控制器直接解决了问题。
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = storyboard.instantiateViewControllerWithIdentifier("ProximityQuestionsIntroductionViewController")
navigationController = UINavigationController.init(rootViewController:initialViewController)
navigationController?.setViewControllers([initialViewController], animated: false)
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
认沽故事板ID,此ProximityQuestionsIntroductionViewController
你必须标记窗口和navController变量可选:
var window : UIWindow?
var navController : UINavigationController?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
{
let testViewController:ProximityQuestionsIntroductionViewController = ProximityQuestionsIntroductionViewController();
self.navController = UINavigationController(rootViewController: testViewController);
if let window = window {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds);
self.window!.rootViewController = navController;
self.window!.backgroundColor = UIColor.whiteColor();
self.window!.makeKeyAndVisible();
}
return true
}
如果您是通过Xcode模板创建项目的: 从Info.plist中删除键“Main storyboard file base name”的键值对。 删除故事板文件Main.storyboard。
这就是我第一次发布问题时的代码。它不起作用,self.navigationController在第一个控制器的函数启动中暂停。 –
我试图做所有我的项目没有故事板,所以我有一个:'NSInvalidArgumentException',原因:'故事板()不包含视图控制器与标识符'ProximityQuestionsIntroductionViewController'' –
那么你使用xib进行设计? –
我以编程方式完成这一切。这是一个由其他人开始的项目,我不能读故事板它是一团糟。 –