如何在Swift中调用现有navigationcontroller
我的故事板中有3个项目。1.viewController(A)已连接到2。导航控制器和3。viewController(B)未连接到任何对象 所有3项都在情节提要中设置了恢复标识符 viewController(B)是初始视图控制器。 我试图在B中获取A所连接的导航控制器,但始终返回nil:如何在Swift中调用现有navigationcontroller,swift,uiviewcontroller,uinavigationcontroller,Swift,Uiviewcontroller,Uinavigationcontroller,我的故事板中有3个项目。1.viewController(A)已连接到2。导航控制器和3。viewController(B)未连接到任何对象 所有3项都在情节提要中设置了恢复标识符 viewController(B)是初始视图控制器。 我试图在B中获取A所连接的导航控制器,但始终返回nil: let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let vc = storyBoard.instantiateV
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyBoard.instantiateViewControllerWithIdentifier("viewControllerA") as! ViewControllerA
print(vc.navigationController?) // always prints nil
为什么
更新#1
我不能像视图控制器那样声明UINavigationController。我已尝试将id为“myNavigationController”的navigationcontroller设置为故事板id:
当情节提要时,我得到了这个错误
let navigationController = storyBoard.instantiateViewControllerWithIdentifier("myNavigationController") as! UINavigationController
print(self.navigationController!) // fatal error: unexpectedly found nil while unwrapping an Optional value
我还尝试过在restoration identifier中设置id,它在前面的实例化行中失败了
@ColdLogic,查看在整个项目中搜索该标识符时得到的结果:
使用
NavigationController
标识符访问NavigationController
,并且ViewController A已连接到它,因此,它将自动加载到NavigationController
使用NavigationController
标识符访问NavigationController
,并且ViewController A已连接到它,因此,它将自动加载到导航控制器
,因为您从未实例化导航控制器,而是实例化了视图控制器A。如果您希望导航控制器和视图控制器都像在故事板中一样进行设置,则需要类似的设置
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let navigationController = storyBoard.instantiateViewControllerWithIdentifier("YourNavControllerIdentifier") as! UINavigationController
let vc = navigationController.topViewController as! ViewControllerA
您的代码直接实例化ViewControllerA类型的对象。除非您设置逻辑来执行此操作,否则默认情况下没有导航控制器。因为您从未实例化导航控制器,所以您实例化了视图控制器a。如果您希望导航控制器和视图控制器都像在故事板中一样进行设置,您可能需要这样的设置
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let navigationController = storyBoard.instantiateViewControllerWithIdentifier("YourNavControllerIdentifier") as! UINavigationController
let vc = navigationController.topViewController as! ViewControllerA
您的代码直接实例化ViewControllerA类型的对象。除非您设置了逻辑,否则默认情况下没有导航控制器。这对我很有用
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let navigationController = storyBoard.instantiateViewController(withIdentifier: "HomeNavigationContoller") as! UINavigationController
let viewController = storyBoard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
navigationController.pushViewController(messageVC, animated: true)
self.present(navigationController, animated: true, completion: nil)
这对我有用
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let navigationController = storyBoard.instantiateViewController(withIdentifier: "HomeNavigationContoller") as! UINavigationController
let viewController = storyBoard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
navigationController.pushViewController(messageVC, animated: true)
self.present(navigationController, animated: true, completion: nil)
我可能错了,但实际上您正在实例化视图控制器,而视图控制器并没有实例化其父导航控制器。您需要单独实例化导航控制器,然后将视图控制器添加为子级。您是否确定在故事板中将ViewController a命名为
viewControllerA
?我可能错了,但您实际实例化的是视图控制器,而视图控制器并未实例化其父级导航控制器。您需要单独实例化导航控制器,然后将视图控制器添加为子级。您确定在故事板中将ViewController a命名为viewControllerA
?我不能像您所说的那样实例化导航控制器。查看我的更新情节提要标识符不是myNavigationController。仔细检查您是否使用了正确的脚本标识符来实例化导航控制器。抱歉,没有仔细阅读您的更新。self.
是零的原因。请尝试println(导航控制器)
。无论您在何处运行此代码,都没有navigationController
对象。但是这个println
将打印您刚刚从故事板创建的一个。我不能像您所说的那样实例化导航控制器。查看我的更新情节提要标识符不是myNavigationController。仔细检查您是否使用了正确的脚本标识符来实例化导航控制器。抱歉,没有仔细阅读您的更新。self.
是零的原因。请尝试println(导航控制器)
。无论您在何处运行此代码,都没有navigationController
对象。但是这个println
将打印您刚刚从故事板创建的一个。它表明代码找不到NavigationController的ID。我已经试过多次了。检查我的更新。似乎代码找不到NavigationController的ID。我已经试过多次了。检查我的更新。谢谢分享!对我工作!谢谢分享!对我工作!