IOS 13 FWPopupView彈出框不彈出 windowScene新特性 解決方案

昨天集成這個FWPopupView的時候發(fā)現(xiàn)彈出框不彈出來,因?yàn)轫?xiàng)目里的彈出框是加載到自定義的FWPopupWindow上的,但是FWPopupWindow壓根沒初始化成功,(能彈出來才見鬼)

然后用低版本項(xiàng)目集成,一下子就成功了,所以猜想是windowScene的問題
專業(yè)術(shù)語咱也不會說,話不多說上代碼

前期準(zhǔn)備:

1.首先在你的xcode11 ios 13的環(huán)境下,新建一個xcode項(xiàng)目
image.png
xcode 11, ios 13 新建的項(xiàng)目結(jié)構(gòu)是下圖這樣:
image.png
2.打開終端用pod引入FWPopupView 和 IQKeyboardManagerSwift
image.png
3. 在pod里找到FWPopupWindow文件 并需要改兩處
image.png
   @objc public class var sharedInstance: FWPopupWindow {
       struct Static {
           static let kbManager: FWPopupWindow = { () -> FWPopupWindow in
               if #available(iOS 13.0, *) {
                          let windowScene = UIApplication.shared
                                          .connectedScenes
                                          .filter { $0.activationState == .foregroundActive }
                                          .first
                          if let windowScene = windowScene as? UIWindowScene {
                           return FWPopupWindow(windowScene: windowScene)
                   }
                         
               }
               return FWPopupWindow(frame: UIScreen.main.bounds)
               
           }()
           
       }
       return Static.kbManager
   }
image.png
 public override init(frame: CGRect) {
        super.init(frame: frame)
        self.setup()
        
    }
    
    @available(iOS 13.0, *)
    public override init(windowScene: UIWindowScene) {
        if #available(iOS 13.0, *) {
            super.init(windowScene: windowScene)
            setup()
        } else {
            // Fallback on earlier versions
            fatalError("")
        }
    }
    
    func setup() {
        let rootVC = FWPopupRootViewController()
        rootVC.view.backgroundColor = UIColor.clear
        self.rootViewController = rootVC
        
        self.windowLevel = UIWindow.Level.statusBar + 1
        
        let tapGest = UITapGestureRecognizer(target: self, action: #selector(tapGesClick(tap:)))
        //        tapGest.cancelsTouchesInView = false
        tapGest.delegate = self
        self.addGestureRecognizer(tapGest)
        
        let panGest = UIPanGestureRecognizer(target: self, action: #selector(panGesClick(pan:)))
        self.addGestureRecognizer(panGest)
    }
4、項(xiàng)目兼容ios13
image.png

項(xiàng)目會報一堆錯


image.png

需要在函數(shù)前添加一行代碼

@available (iOS 13.0, *)
image.png

這里也會報錯 ,直接在類前添加 @available (iOS 13.0, *)


image.png

image.png
5.自定義根控制器
image.png
guard let windowScene = (scene as? UIWindowScene) else { return }
        self.window = UIWindow (windowScene: windowScene)
        self.window?.rootViewController = UINavigationController(rootViewController: ViewController())
        self.window?.backgroundColor = UIColor.yellow
        self.window?.makeKeyAndVisible()
6. 最后在根控制器里隨便寫一個例子調(diào)用一個彈框
image.png
//
//  ViewController.swift
//  PopViewTest
//
//  Created by uu on 2019/11/14.
//  Copyright ? 2019 UU. All rights reserved.
//

import UIKit
import FWPopupView

class ViewController: UIViewController {
    
    lazy var alertImage: FWAlertView = {
        
        let block2: FWPopupItemClickedBlock = { [weak self] (popupView, index, title) in
            
            if index == 1 {
                // 這邊演示了如何手動去調(diào)用隱藏
                self?.alertImage.hide()
            }
        }
        
        // 注意:此時“確定”按鈕是不讓按鈕自己隱藏的
        let items = [FWPopupItem(title: "取消", itemType: .normal, isCancel: true, canAutoHide: true, itemClickedBlock: block2),
                     FWPopupItem(title: "確定", itemType: .normal, isCancel: false, canAutoHide: false, itemClickedBlock: block2)]
        // 注意:添加自定義的視圖,需要設(shè)置確定的Frame值
        let customImageView = UIImageView(image: UIImage(named: "audio_bgm_4"))
        customImageView.frame = CGRect (x: 0, y: 0, width: 100, height: 100)
        customImageView.backgroundColor = UIColor.blue
        let vProperty = FWAlertViewProperty()
        vProperty.touchWildToHide = "1"
        
        let alertImage = FWAlertView.alert(title: "標(biāo)題", detail: "帶自定義視圖", inputPlaceholder: nil, keyboardType: .default, isSecureTextEntry: false, customView: customImageView, items: items, vProperty: vProperty)
        return alertImage
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        self.navigationItem.rightBarButtonItem = UIBarButtonItem (title: "點(diǎn)我吖", style: .done, target: self, action: #selector(onClickPop))
    }
    @objc func onClickPop() {
        print(self.alertImage.frame)
        self.alertImage.show()
        print(self.alertImage.frame)
    }
}

成功在xcode 11, ios 13 上集成~~~~

注意?。。。。。?!最主要的步驟是3

不懂的私信 溜了溜了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容