push 在以模态方式呈现的控制器上不起作用
Posted
技术标签:
【中文标题】push 在以模态方式呈现的控制器上不起作用【英文标题】:push is not working on the controller which was presented modally 【发布时间】:2016-02-12 19:25:56 【问题描述】:您好,我在 FirstViewController 上有一个按钮,我将一个 segue 从 firstViewController 拖到 secondViewController 作为 segue Modally。现在在 secondViewController 上,我正在以编程方式生成一个 Button 并继续在第三个控制器上,我正在推动控制器(segue Push)但它不起作用。第三个控制器没有出现。单击自定义按钮时没有任何反应。
这是第二个ViewController的代码
func nextButtonClicked(sender:UIButton!)
let takeProductPhotoController = self.storyboard!.instantiateViewControllerWithIdentifier("takeProductPhotoController") as! TakeProductPhotoController
takeProductPhotoController.trip = trip
self.navigationController?.pushViewController(takeProductPhotoController, animated: true)
注意:我不需要第二个视图控制器上的 NavigationBar,因此在模态显示它时它没有显示 navigationBar。但我需要第三个导航栏。所以这就是我推动导航控制器的原因
【问题讨论】:
【参考方案1】: 当你想从弹出的控制器推送时,你必须创建 新的NavigationController
& 还设置了你的ViewController
想以rootViewController
of navigationController
的形式呈现模态。
当我们想要呈现SecondViewcontroller
modally 时,我们正在呈现
rootViewController
设置为 SecondViewController
的导航控制器。所以我们
已创建新的导航堆栈。之后我们将
将控制器推送到在呈现 SecondViewController
时创建的新导航堆栈中。
1) 你的代码应该是这样的
在FirstViewController
let secondViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("aIdentifier") as! SecondViewController
let nav = UINavigationController(rootViewController: SecondViewController )
self.presentViewController(nav, animated:true, completion:nil)
2) 从secondViewController
你可以将ThirdViewController
推入
self.naviagtionController
。
在按钮操作的 SecondViewController 中编写以下代码
let thirdViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("cIdentifier") as! ThirdViewController self.navigationController?.pushViewController(thirdViewController , animated: true)
【讨论】:
好吧你的意思是我必须写这段代码..让导航: UINavigationController = UINavigationController(rootViewController: self.storyboard!.instantiateViewControllerWithIdentifier("takeProductPhotoController") as! TakeProductPhotoController) self.navigationController?.pushViewController(导航,动画:真)? 是的,这就是我的意思,但使用导航控制器而不是 push@hellosheikh 您能否提供确切的语法,因为我正在努力使其工作。我已经尝试过这个 var rootViewController = self.window.rootViewController as UINavigationController let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main ", bundle: nil) var takeProductPhotoController = mainStoryboard.instantiateViewControllerWithIdentifier("takeProductPhotoController") as! TakeProductPhotoController rootViewController.pushToViewController(takeProductPhotoController, animated: true) 问题是 self.window 在这个 VC 中不可用,所以出现语法错误 好的,感谢您的代码正常工作,但控制器从底部弹出,就像模态控制器弹出一样。我希望控制器像 push segue 一样出现 secondViewController 将从底部弹出,如果您将控制器推到第二个控制器上,它将显示为 push【参考方案2】:好的,我在这里详细发布了我在做什么以及我为解决 Rohit Answer 帮助我的问题所做的工作。
我的 FirstVC
在 IB 中通过 segue 连接到 SecondVC
为 presentModally
。然后在 SecondVC 中尝试推送ThirdVC
let thirdVC = self.storyboard!.instantiateViewControllerWithIdentifier("thirdVC") as! ThirdVC
self.navigationController?.pushViewController(thirdVC, animated: true)
没有用。
所以为了解决这个问题,我从 IB 中删除了 FirstVC 和 SecondVC 之间的 segue
,并在我的 firstVC 中编写了这段代码
let secondVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("secondVC") as! SecondVC
let nav = UINavigationController(rootViewController: secondViewController )
self.presentViewController(nav, animated:true, completion:nil)
然后在 secondVC
let thirdVC = self.storyboard!.instantiateViewControllerWithIdentifier("thirdVC") as! ThirdVC
self.navigationController?.pushViewController(thirdVC, animated: true)
它的工作原理
【讨论】:
记得在swift 4中presentViewController
被重命名为present
以上是关于push 在以模态方式呈现的控制器上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用模态呈现的 NavigationController(iOS 5 - Storyboard)时,委托不起作用
以模态方式呈现的 UIPopoverController 在 iOS 5 中不起作用