【问题标题】:how can i dismiss a viewcontroller whilst at the same time segue onto a different one我如何在关闭视图控制器的同时切换到另一个视图控制器
【发布时间】:2021-11-09 07:25:30
【问题描述】:

我目前无法关闭视图控制器,同时让应用程序移动到不同的控制器而不会遇到一些错误。我的代码当前所做的是,当计时器“secondsRemaining”达到零时,它将关闭它所在的当前视图控制器,并将显示在当前视图控制器下方显示的前一个视图控制器是“homeScreenViewController”。因此它不会调用代码-self.performSegue(withIdentifier: "gameScreenToHighscore", sender: self)

当前代码:

@objc func updateTimer() {
            if secondsRemaining > 0 {
                secondsRemaining -= 1
                timerLabel.text = "Timer:\(secondsRemaining)"
                print(secondsRemaining)
            } else {
                self.dismiss(animated: true, completion: nil)
                self.performSegue(withIdentifier: "gameScreenToHighscore", sender: self)
                
            }
        }

【问题讨论】:

    标签: swift xcode segue viewcontroller


    【解决方案1】:

    我认为最好的方法是在父 ViewController 中处理导航,你可以通过 delegate 来实现。

    在 ChildViewController 中:

    @protocol ModalVCDelegate {
        func navigateToTheSecondVC()
    }
    
    class ModalViewController {
        weak delegate: ModalVCDelegate!
    }
    

    你应该在计时器完成后调用委托方法。

    delegate?.navigateToTheSecondVC()
    

    同样在 ParentViewController 中,你应该设置委托:

    childVC.delegate = self
    present(childVC, animated: true, completion: nil)
    

    然后:

    extension MainViewController: ModalVCDelegate {
        func navigateToTheSecondVC {
           dismiss(animated: true, completion: {
                self.performSegue(withIdentifier: "gameScreenToHighscore", sender: self)
           })
        }
    }
    

    【讨论】:

    • 在以extension开头的代码行中,“EmployeePickerDelegate”应该是ModalVCDelegate吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2014-12-12
    相关资源
    最近更新 更多