首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Swizzle方法中排除视图以外的UIViewControllers?

如何从Swizzle方法中排除视图以外的UIViewControllers?
EN

Stack Overflow用户
提问于 2022-02-23 22:38:24
回答 1查看 109关注 0票数 1

我试图覆盖我的自定义ViewControllers的ViewControllers()方法,并且我找到了一个使用swizzle方法的解决方案。它工作,但当键盘是可见的,我的方法也收集键盘UIViewControllers喜欢;

代码语言:javascript
复制
    UIInputWindowController
    UICompatibilityInputViewController
    UISystemKeyboardDockController
    UIInputWindowController
    UICompatibilityInputViewController
    UICompatibilityInputViewController
    UISystemInputAssistantViewController
    UIPredictionViewController
    UISystemKeyboardDockController

我想知道如何排除除我的自定义UIViewControllers之外的所有ViewControllers?我可以排除到目前为止遇到的那些UIViewControllers,但我认为除了未来的UIViewControllers之外,还会有其他的。我想我需要一个通用的解决方案。

我的代码如下:

代码语言:javascript
复制
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)
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-02 09:35:16

您可以忽略所有类名以"UI“或"_”开头的ViewController。您可以使用type(of: self).description()获得VC的类名字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71244846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档