递归获取当前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
}
调用方式:
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控制器调用B中xx的方法,perform的用法
onThread:执行xx方法的线程
waitUntilDone:true代表先执行xx方法再执行一下代码.