遞歸獲取當前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í)行一下代碼.