我试图覆盖我的自定义ViewControllers的ViewControllers()方法,并且我找到了一个使用swizzle方法的解决方案。它工作,但当键盘是可见的,我的方法也收集键盘UIViewControllers喜欢;
UIInputWindowController
UICompatibilityInputViewController
UISystemKeyboardDockController
UIInputWindowController
UICompatibilityInputViewController
UICompatibilityInputViewController
UISystemInputAssistantViewController
UIPredictionViewController
UISystemKeyboardDockController我想知道如何排除除我的自定义UIViewControllers之外的所有ViewControllers?我可以排除到目前为止遇到的那些UIViewControllers,但我认为除了未来的UIViewControllers之外,还会有其他的。我想我需要一个通用的解决方案。
我的代码如下:
extension UIViewController {
@objc func viewDidApperOverride(_ animated: Bool) {
self.viewDidApperOverride(animated)
print(NSStringFromClass(type(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)
}
}发布于 2022-05-02 09:35:16
您可以忽略所有类名以"UI“或"_”开头的ViewController。您可以使用type(of: self).description()获得VC的类名字符串。
https://stackoverflow.com/questions/71244846
复制相似问题