Я пытаюсь представить ViewController из другого файла swift.Это работает, если я хочу представить ViewController из другого ViewController.
На этот раз я хочу представить ViewController в tabBarController из класса, который принадлежит XIB.Это печатает: «В новом init» в презентере, но не печатает: «настройка презентатора» в VC.Есть идеи, почему?
(вырезан несвязанный код)
Код из класса в xib:
@IBAction func timerBtnAction(_ sender: Any) {
let vc = UIStoryboard(name: "SleepTimerPopup", bundle: nil).instantiateViewController(withIdentifier: "SleepTimerPopup_UI") as! SleepTimerPopup_UI
vc.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
let currentController = self.getCurrentViewController()
currentController?.tabBarController?.present(vc, animated: true, completion: nil)
}
func getCurrentViewController() -> UIViewController? {
if let rootController = UIApplication.shared.keyWindow?.rootViewController {
var currentController: UIViewController! = rootController
while( currentController.presentedViewController != nil ) {
currentController = currentController.presentedViewController
}
return currentController
}
return nil
}
ViewController, который я хочу представить в текущем контексте:
class SleepTimerPopup_UI: UIViewController, SleepTimerPopupDelegate{
@IBOutlet var shortcutOutlets: [UIButton]!
@IBOutlet weak var timerDoneOutlet: UIButton!
@IBOutlet weak var timePickerOutlet: UIDatePicker!
@IBOutlet weak var sleepTimerContainerView: UIView!
@IBOutlet weak var sleepTimeLabel: UILabel!
@IBOutlet weak var stopWatchBackgroundView: UIView!
@IBOutlet weak var stopWatchImage: UIView!
let sleepTimerPopupDelegate = SleepTimerPopupPresenter()
override func viewDidLoad() {
super.viewDidLoad()
setupSleepTimerUI()
setupSleepTimerDelegate()
}
func setupSleepTimerDelegate(){
print("setting up presenter") <-- THIS IS NOT PRINTED
sleepTimerPopupDelegate.setSleepTimerViewDelegate(sleepTimerDelegate : self)
}
ViewControllerPresenter, который я хочу представить в текущем контексте:
class SleepTimerPopupPresenter{
weak private var sleepTimerDelegate : SleepTimerPopupDelegate?
static var sleepTimer = SleepTimer(sleepTimerPopupPresenter: SleepTimerPopupPresenter())
static var doneBtnIsSelected = false
private var latestOutlet : UIButton?
private var setTime : (Int, Int)
init(){
setTime = (0, 0)
print("in new init") <----- THIS IS PRINTED
NotificationCenter.default.addObserver(
self,
selector: #selector(self.timeChanged),
name: Notification.Name("TimeUpdate"),
object: nil)
}
func setSleepTimerViewDelegate(sleepTimerDelegate : SleepTimerPopupDelegate){
self.sleepTimerDelegate = sleepTimerDelegate
}