界面上一直显示当前控制器的名字
思路:
ICEDebuger类
用于显示当前控制器的一个单例,一个label。
UIViewController+ICEDebuger类
在+ (void)load;方法中利用runtime的method_exchangeImplementations(Method m1, Method m2)方法在viewDidAppear中获取当前界面的类名。
ICEDebuger.h
//
// ICEDebuger.h
// ICEDebuger
//
// Created by iOS on 27/5/17.
// Copyright © 2017年 iOS. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface ICEDebuger : NSObject
+ (instancetype)shareInstance;
/// 自定义要显示的信息
@property (nonatomic, copy)NSString * strTitle;
/// 显示信息标签
@property (nonatomic, strong, readonly)UILabel * lblNote;
@end
ICEDebuger.m
//
// ICEDebuger.m
// ICEDebuger
//
// Created by iOS on 27/5/17.
// Copyright © 2017年 iOS. All rights reserved.
//
#import "ICEDebuger.h"
@interface ICEDebuger ()
@property (nonatomic, strong) UILabel *lblNote;
@end
@implementation ICEDebuger
+ (instancetype)shareInstance {
static ICEDebuger *debuger = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
debuger = ICEDebuger.new;
});
return debuger;
}
- (instancetype)init {
self = [super init];
if (self) {
self.strTitle = @"控制器:";
}
return self;
}
- (UILabel *)lblNote {
if (!_lblNote) {
_lblNote = UILabel.new;
_lblNote.frame = CGRectMake(0, 16, UIScreen.mainScreen.bounds.size.width, 20);
_lblNote.textColor = [UIColor whiteColor];
_lblNote.adjustsFontSizeToFitWidth = YES;
_lblNote.font = [UIFont systemFontOfSize:14];
_lblNote.backgroundColor = [UIColor blackColor];
}
if (!_lblNote.superview) {
UIWindow * window = [[[UIApplication sharedApplication] delegate] window];
if (window) {
[window addSubview:_lblNote];
}
}
return _lblNote;
}
@end
//
// UIViewController+ICEDebuger.m
// ICEDebuger
//
// Created by iOS on 27/5/17.
// Copyright © 2017年 iOS. All rights reserved.
//
#import "UIViewController+ICEDebuger.h"
#import <objc/runtime.h>
#import "ICEDebuger.h"
@implementation UIViewController (ICEDebuger)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Method iceViewDidAppear = class_getInstanceMethod(self, @selector(iceViewDidAppear:));
Method viewDidAppear = class_getInstanceMethod(self, @selector(viewDidAppear:));
method_exchangeImplementations(viewDidAppear, iceViewDidAppear);
Method iceDealloc = class_getInstanceMethod(self, @selector(iceDealloc));
Method dealloc = class_getInstanceMethod(self, NSSelectorFromString(@"dealloc"));
method_exchangeImplementations(dealloc, iceDealloc);
});
}
- (void)iceViewDidAppear:(BOOL)animated {
if(![self isPrivateVC]) {
UILabel *label = (UILabel *)[ICEDebuger shareInstance].lblNote;
if (label.superview) {
[label.superview bringSubviewToFront:label];
}
if ([ICEDebuger shareInstance].strTitle == nil) {
[ICEDebuger shareInstance].strTitle = @" ";
}
label.text = [NSString stringWithFormat:@"%@%@",[ICEDebuger shareInstance].strTitle,[NSStringFromClass(self.class) componentsSeparatedByString:@"."].lastObject];
}
[self iceViewDidAppear:animated];
}
- (void)iceDealloc {
NSLog(@">>>>>>>>>>%@ 已经释放了<<<<<<<<<<",[NSStringFromClass(self.class) componentsSeparatedByString:@"."].lastObject);
[self iceDealloc];
}
- (BOOL)isPrivateVC {
NSString * selfClass = NSStringFromClass(self.class);
return [selfClass isEqualToString:@"UIAlertController"] ||
[selfClass isEqualToString:@"_UIAlertControllerTextFieldViewController"] ||
[selfClass isEqualToString:@"UIApplicationRotationFollowingController"] ||
[selfClass isEqualToString:@"UIInputWindowController"];
}
@end
网友评论