统一的UIViewController“最前面的变成了”检测?

问题描述 投票:3回答:1

在我看来,这些情况都是平行的:

  • 我的观点提出了另一种观点认为控制器控制器全屏,目前已被免职
  • 我的观点提出了另一种观点认为控制器不能全屏控制器,它现在已经被解雇
  • 我的视图控制器提出了一种酥料饼,现已被解雇
  • 我的视图控制器推另一个视图控制器,它现在已经弹出

在任何情况下,我的视图控制器不再是“最前面的”视图控制器,然后成为“最前面的”一次。我觉得奇怪的是,iOS版已经没有单一的毯子“成了最前面的”发送到涵盖所有这些情况下,我的视图控制器事件。

我想我可以单独覆盖每个这样的情况下,我认为这些都是我需要涵盖所有情况,但最终的代码混乱和分散:

  • viewDidAppear检测全屏呈现视图控制器的推视图控制器和解雇的爆裂
  • 酥料饼的委托消息检测酥料饼的解雇
  • 不知道什么检测nonfullscreen呈现视图控制器的解雇

人们如何连贯,优雅的处理呢?

ios cocoa-touch uiviewcontroller
1个回答
0
投票

什么案件的共同点是不是原来的视图控制器的外观,但所提出的/推视图控制器的消失。因此,一个简单的和澄清的溶液似乎是一个协议 - 和 - 代表架构。声明一对协议,如下:

protocol Home : class {
    func comingHome()
}
protocol Away : class {
    var home : Home? {get set}
}
extension Away where Self : UIViewController {
    func notifyComingHome() {
        if self.isBeingDismissed || self.isMovingFromParent {
            self.home?.comingHome()
        }
    }
}
  • 主页视图控制器必须采用家庭,并且必须设置每个视图控制器的home时提出或推动它self
  • 所提出的或推视图控制器必须采用远,必须实现viewWillDisappear如下: override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.notifyComingHome() }

这适用于在问题中列出的四种情况。可惜的是,虽然,可可触摸没有自动为您做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.