关闭一个 ViewController 并呈现另一个 ViewControlloer - IOS - Swift 3
Posted
技术标签:
【中文标题】关闭一个 ViewController 并呈现另一个 ViewControlloer - IOS - Swift 3【英文标题】:Dismiss a ViewController and present another ViewControlloer - IOS - Swift 3 【发布时间】:2017-03-09 20:59:55 【问题描述】:我想关闭一个 ViewController 并呈现另一个 ViewController。这是我的代码:
主VC:
@IBAction func loadFirstVCClicked(_ sender: UIButton)
self.present(FirstViewController.loadVC()
FirstViewController:
static func load() -> FirstViewController
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController
return vc
@IBAction func exitClicked(_ sender: UIButton)
self.dismiss(animated: true, completion:
self.present(SecondViewController.loadVC()
)
第二视图控制器:
static func loadVC() -> SecondViewController
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
return vc
@IBAction func exitClicked(_ sender: UIButton)
self.dismiss(animated: true, completion:
//present MainVC - second VC should work as an interstitial ad
)
我收到此错误:“FirstViewController 上的第二视图控制器,其视图不在窗口层次结构中!”
而且它没有显示出来。所以基本上我希望 SecondViewController 成为 SecondViewController 的解雇和 MainVC didLoad 之间的一种插页式广告
基本方案:
FirstViewController->SecondViewController->MainVC
您的任何建议将不胜感激。谢谢!
【问题讨论】:
您正在尝试从已关闭的 FirstViewController 中呈现。您应该从 MainVC 中呈现。 我会使用由 MainVC 实现并在您想要关闭它时由 SecondVC 调用的委托。然后 MainVC 解散 SecondVC 并呈现 FirstVC 【参考方案1】:您不应该使用静态函数来创建视图控制器。显示插页式的正确方法首先打开 mainviewcontroller 和 onViewDidAppear 显示您的广告 viewcontroller
@IBAction func loadFirstVCClicked(_ sender: UIButton)
let firstViewController = self.storyboard?.instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController
self.present(firstViewController)
@IBAction func loadMainVCClicked(_ sender: UIButton)
let mainViewController = self.storyboard?.instantiateViewController(withIdentifier: "MainViewController") as! MainViewController
self.present(firstViewController)
class MainViewController: UIViewController
override func viewDidAppear(_ animated: Bool)
super.viewDidAppear(animated)
// there you can present your interstitial viewcontroller
class InterstitialViewController: UIViewController
// when user press close or after a time limit dismiss
协议(委托)示例
// give the name you want
protocol LiveProtocol: class
func onFirstViewControllerDismissed()
还有你在 firstviewcontroller 之前的 live viewcontroller
class LiveViewController: UIViewController, LiveProtocol
...
internal func onFirstViewControllerDismissed()
// present your interstitial
【讨论】:
您好,谢谢您的建议,但我只想在 FirstVC 关闭时才显示插页式广告,而不是在 MainVC 出现时显示插页式广告 因此,您必须拥有另一个在 FirstVC 关闭时处于活动状态的视图控制器,您可以通过委托触发它并显示插页式 你能告诉我吗?我是 ios 新手,因此可以委托模式以上是关于关闭一个 ViewController 并呈现另一个 ViewControlloer - IOS - Swift 3的主要内容,如果未能解决你的问题,请参考以下文章
Swift:关闭 viewController 1 然后呈现 viewController 2
关闭 viewController 会重置呈现的 navigationController
使用 Swift 呈现新的 Viewcontroller 后如何关闭以前的 Viewcontroller?
iOS:在不访问其父 ViewController 的情况下关闭和呈现 ModalViewController
关闭以编程方式呈现在嵌套在 NavigationController 中的 ViewController 中的 ViewController 崩溃,但并非每次