Method swizzling的坑点

iOS的ViewController默认backgroundColorclearColor,如果不设置背景颜色,会导致新界面的背景是透明色,还会导致跳转动画卡顿。
但是每创建一个ViewController就要设置一次backgroundColor。那么有没有什么办法可以简化呢?
最近在复习runtimeMethod swizzling的知识,于是决定用runtime的知识来处理下这个问题:

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    Class class = [self class];
    
    SEL originalSelector = @selector(viewDidLoad);
    SEL swizzledSelector = @selector(ghh_viewDidLoad);
    
    Method originalMethod = class_getInstanceMethod(class, originalSelector);
    Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
    
    BOOL didAddMethod =
    class_addMethod(class,
                    originalSelector,
                    method_getImplementation(swizzledMethod),
                    method_getTypeEncoding(swizzledMethod));
    
    if (didAddMethod) {
        class_replaceMethod(class,
                            swizzledSelector,
                            method_getImplementation(originalMethod),
                            method_getTypeEncoding(originalMethod));
        } else {
            method_exchangeImplementations(originalMethod, swizzledMethod);
        }
    });
}

- (void)ghh_viewDidLoad {
    self.view.backgroundColor = [UIColor lightGrayColor];
    [self ghh_viewDidLoad];
    NSLog(@"%@ method did changed!", self);
}

没一会儿就写完了,调试运行结果。没有问题!

Screen Shot 2017-04-17 at 下午7.43.31.png

但是在滑动返回的时候,整个界面变成灰色了!

Screen Shot 2017-04-17 at 下午7.48.30.png

同时控制台打印结果:

2017-04-17 19:47:53.411627+0800 ThugLife[9251:4390465] <UINavigationController: 0x100816000> method did changed!
2017-04-17 19:47:53.434202+0800 ThugLife[9251:4390465] <ViewController: 0x1004095c0> method did changed!
2017-04-17 19:47:54.785103+0800 ThugLife[9251:4390465] <UINavigationController: 0x100810c00> method did changed!
2017-04-17 19:47:54.788516+0800 ThugLife[9251:4390465] <GHHPhotoViewController: 0x10042e190> method did changed!
2017-04-17 19:47:54.899452+0800 ThugLife[9251:4390465] <GHHGridViewController: 0x10043cd60> method did changed!
2017-04-17 19:47:58.734195+0800 ThugLife[9251:4390465] <GHHPhotoEditingViewController: 0x100440a70> method did changed!
2017-04-17 19:47:59.991616+0800 ThugLife[9251:4390465] <UIInputWindowController: 0x100906200> method did changed!

打开UI调试,看页面层级关系图貌似也没问题:

Paste_Image.png

但是除了正常的UIWindow之外,还有一个UITextEffectsWindow,查看这个window,发现页面什么都没有。在此找到了罪魁祸首,就是这个东西挡在了UI前面导致显示失败

Paste_Image.png

原因

iOS 8 inserts a new “UITextEffectsWindow” above your application’s main UIWindow that currently intercepts clicks when selecting items in the Reveal canvas. To work around this you can either Command-Click to select through the UITextEffectsWindow or double-click on your app’s UIWindow in Reveal’s outline view to focus on the application window.

在Google了相关资料后发现,这是一个iOS8以后新加入的私有window,根据网上说法是用来控制键盘的专属window,后面查证,当vc存在于navigationVC下 此时不管是否弹出键盘 [UIApplication shareappliation] windows 都会包含UITextEffectsWindow
所以当滑动popViewController的时候,这个window被加在UIWindow上,挡住了整个UI视图。

而且这种方法还会对iOS8以后的UIAlertController同样染色。
所以这种黑科技证明是不行的,只能另想办法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 曾经有一份美好的爱情放在我的面前我没有珍惜。等到失去后才后悔莫及。如果可以再对小李说。毛欣想说。这辈子无缘再牵手。...
    毛欣与小李阅读 2,486评论 0 13
  • “老公,今天又加班吗?” “是啊,对不起宝贝,今天又不能陪你去看电影了,有紧急会议要开。宝贝你的电影票钱我来报销。...
    触不可及的恋人阅读 524评论 0 50
  • 那些我用来留恋记念不舍的东西 得确在阻止我前进 有时候那些东西真的丢掉或者烧掉就好 从小就喜欢收集旧东西,闲来无事...
    bfb2551be0b5阅读 144评论 0 0
  • 去瓦迪拉姆只是一个一闪而过的念头 ,早上就收到Majid的信息 ,说今天会到佩特拉回安曼顺便可以搭我们去 。啊 神...
    张俊霞阅读 372评论 0 0