【问题标题】:I want my view controllers to have the same combination of custom UIViews which communicate with each other我希望我的视图控制器具有相同的自定义 UIView 组合,它们可以相互通信
【发布时间】:2017-04-28 09:41:30
【问题描述】:

我希望我的几个视图控制器在底部有一个播放器。该播放器由 2 个视图组成:播放器和一个切换它的按钮(可以隐藏或展开)。

现在我在每个视图控制器中使用下面的代码来添加这个播放器。

@IBOutlet weak var broadcastView: BroadcastView!
@IBOutlet weak var broadcastViewBottomConstraint: NSLayoutConstraint!
@IBOutlet weak var avatarImageView: UIImageView!

@IBAction func toggleBroadcastMode(_ sender: ToggleBroadcastButton) {
    if sender.isExpanded {
        broadcastViewBottomConstraint.hideBroadcastView()
    } else {
        broadcastViewBottomConstraint.expandBroadcastView()
    }
    animateBroadcastToggle()

    sender.toggle()
    broadcastView.toggleBroadcastView()
}

有没有办法不一遍又一遍地复制代码?也许我可以创建父 VC 或 View 来做到这一点?如果是,那怎么办?

【问题讨论】:

  • 你可以使用containerview
  • 因为我没用过,能不能给个更详细的解释?

标签: ios swift xcode uiview


【解决方案1】:

我个人会将 UINavigationController 子类化并将其放入其中,这样您就可以在流程中导航,而玩家在底部保持良好状态,如果您需要 VC 与之交互,那么您可以

if let nav = navigationController as? MyPlayerNavController {
    nav.PlayThis()
}

你可以让它改变大小和从那里开始的所有东西,你不会在转换和播放音乐时丢失它,比如音乐应用程序。

【讨论】:

    【解决方案2】:

    将其添加为 keyWindow 的子视图。这样,它将始终保留在所有 viewControllers 中。

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        var overlayViewFrame = UIScreen.main.bounds
        overlayViewFrame.origin.y = overlayViewFrame.height - 200
        overlayViewFrame.size.height = 200
        let overlayView = UIView(frame:overlayViewFrame)
        overlayView.backgroundColor = UIColor.cyan
        UIApplication.shared.keyWindow?.addSubview(overlayView)
    }
    

    此代码是示例通用代码。如果您希望某些 VC 不显示此内容,请将此叠加视图保持在单例中,并隐藏在适当的 VC 中。

    输出截图:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多