swift獲取Controller或者View的方法

遞歸獲取當前view中某個view

        /// 獲取lineView
        ///
        /// - Parameter view: 父view
        /// - Returns: wantView
        func findSubView (view: UIView){
            for subview in view.subviews {
                if subview.tag == 999 {//此處以tag對某個view標識
                }
                findSubView(view: subview)
            }
        }
        
        DispatchQueue.mainAsync {
            findSubView(view: alert)
        }

獲取window中最頂層控制器

    //獲取當前頁面的最頂層控制器
   func currentVc() -> UIViewController {
        let keywindow = UIApplication.shared.keyWindow
        let firstView: UIView = (keywindow?.subviews.first)!
        let secondView: UIView = firstView.subviews.first!
        let vc = viewForController(view: secondView)
        return vc!
    }

    func viewForController(view:UIView)->UIViewController?{
        var next:UIView? = view
        repeat{
            if let nextResponder = next?.next, nextResponder is UIViewController {
                return (nextResponder as! UIViewController)
            }
            next = next?.superview
        }while next != nil
        return nil
    }
    

調(diào)用方式:

    let vc = self.currentVc()//獲取當前屏幕中頂層控制器
    if vc.childViewControllers.first is ManagerRootViewController {
         self.perform(#selector(ManagerRootViewController.disAction), on: Thread.main, with: nil, waitUntilDone: true)
    }//如果是UINavgitionController,那么其first就是rootViewController

Perform的使用:

    在A控制器想讓B控制器調(diào)用B中xx的方法,perform的用法
    onThread:執(zhí)行xx方法的線程
    waitUntilDone:true代表先執(zhí)行xx方法再執(zhí)行一下代碼.
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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