[ad_1]
I’m attempting to override viewDidAppear() strategies of my customized ViewControllers and i discovered an answer utilizing swizzle technique. It really works however when keyboard is seen, my technique additionally gathers Keyboard UIViewControllers like;
UIInputWindowController
UICompatibilityInputViewController
UISystemKeyboardDockController
UIInputWindowController
UICompatibilityInputViewController
UICompatibilityInputViewController
UISystemInputAssistantViewController
UIPredictionViewController
UISystemKeyboardDockController
I’m wondering how am i able to exclude all UIViewControllers apart from my customized ViewControllers? I can exclude these UIViewControllers that i encounter to this point however i believe there shall be UIViewControllers apart from these sooner or later. I feel i would like a generic answer.
My code is as under:
extension UIViewController {
@objc func viewDidApperOverride(_ animated: Bool) {
self.viewDidApperOverride(animated)
print(NSStringFromClass(sort(of: self)))
}
static func swizzle() {
if self != UIViewController.self {
return
}
let originalSelector = #selector(UIViewController.viewDidAppear(_:))
let swizzledSelector = #selector(UIViewController.viewDidApperOverride(_:))
guard let originalMethod = class_getInstanceMethod(self, originalSelector),
let swizzledMethod = class_getInstanceMethod(self, swizzledSelector) else { return }
method_exchangeImplementations(originalMethod, swizzledMethod)
}
}
[ad_2]
