【问题标题】:Present a viewController from collectionView从 collectionView 呈现一个 viewController
【发布时间】:2020-10-16 05:01:18
【问题描述】:

我正在扩展 UICollectionView 以创建一个空视图,我无法调用 self.present。有没有更好的方法来处理空视图?我应该如何处理 collectionView 中的 self.present?

extension UICollectionView {
    func setEmptyView() {

        let signUpButton = UIButton(type: .custom)
        signUpButton.addTarget(self, action: #selector(onSignIn), for: .touchUpInside)
    }

    @objc func onSignIn() {
        let viewController = SignInController()
        viewController.modalPresentationStyle = .fullScreen
    
    }
}

【问题讨论】:

  • 要么获取控制器作为参数,要么获取topController来呈现
  • 从 View 打开 ViewController 是不好的设计,我的建议是使用委托并要求 UICollectionView 的 ViewController 处理委托以打开您的 SignInController()。原因是您可能会发现旋转、状态栏和导航栏处理等问题。(基本上所有这些都应该从以前的视图控制器继承)

标签: ios swift xcode uiviewcontroller uicollectionview


【解决方案1】:

您可以从顶级控制器呈现..使用此扩展程序您将获得顶级控制器...

extension UIApplication {

    class func getTopMostViewController() -> UIViewController? {
        let keyWindow = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
        if var topController = keyWindow?.rootViewController {
            while let presentedViewController = topController.presentedViewController {
                topController = presentedViewController
            }
            return topController
        } else {
            return nil
        }
    }
}

然后在您的集合视图扩展中

extension UICollectionView {
    func setEmptyView() {

        let signUpButton = UIButton(type: .custom)
        signUpButton.addTarget(self, action: #selector(onSignIn), for: .touchUpInside)
    }

    @objc func onSignIn() {
        let viewController = SignInController()
        viewController.modalPresentationStyle = .fullScreen
        UIApplication.getTopMostViewController()?.present(viewController, animated: true, completion: nil)
    }

}

【讨论】:

  • 谢谢,但是我很困惑这是处理空视图的好方法。或者只是为它创建一个收集视图单元格?
  • github上有一个很棒的库...github.com/Xiaoye220/EmptyDataSet-Swift
  • 谢谢,顺便说一句为什么它不支持推送视图控制器
猜你喜欢
  • 1970-01-01
  • 2012-02-13
  • 2017-07-03
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多