我们在开发iOS程序是,使用UIAlertViewController写的提示框的字体大小和样式是不可以直接设置属性修改的,下面使用runtime的方式来改变字体的样式。
系统默认的和没修改的样式为:
使用runTime代码实现:
第一、首先导入runtime的头文件
#import <objc/runtime.h>
第二、实现代码:
unsigned int count = 0;
Ivar *property = class_copyIvarList([UIAlertController class], &count);
for (int i = 0; i < count; i++) {
Ivar var = property[i];
const char *name = ivar_getName(var);
const char *type = ivar_getTypeEncoding(var);
NSLog(@"%s =============== %s",name,type);
}
这个方法是使用runtime得到UIAlertViewController所有的属性,
下面是具体的实现代码:
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@""message:@"确认退出当前用户"preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancel=[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
}];
UIAlertAction *defult = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
}];
[alert addAction:cancel];
[alert addAction:defult];
unsigned int count = 0;
Ivar *property = class_copyIvarList([UIAlertController class], &count);
for (int i = 0; i < count; i++) {
Ivar var = property[i];
const char *name = ivar_getName(var);
const char *type = ivar_getTypeEncoding(var);
NSLog(@"%s =============== %s",name,type);
}
//修改内容
Ivar message = property[2];
//修改标题
Ivar title = property[1];
/**
* 字体修改
*/
UIFont *big = [UIFont systemFontOfSize:20];
// UIFont *small = [UIFont systemFontOfSize:18];
UIColor *red = RGB(79, 183, 41);
NSMutableAttributedString *str = [[NSMutableAttributedString alloc]initWithString:@"确认退出当前用户?" attributes:@{NSFontAttributeName:big,
UIFont *big1 = [UIFont systemFontOfSize:20];
// UIFont *small = [UIFont systemFontOfSize:18];
UIColor *red1 = RGB(79, 183, 41);
NSMutableAttributedString *str1 = [[NSMutableAttributedString alloc]initWithString:@"用户" attributes:@{NSFontAttributeName:big,
NSForegroundColorAttributeName:red1}];
//最后把message内容替换掉
object_setIvar(alert, message, str);
object_setIvar(alert, title, str1);
[self presentViewController:alert animated:YES completion:nil];
最后的结果是:
标题和内容的大小和颜色改变。
源码下载地址:https://github.com/fenglingdeyi/UIAlertViewController-Runtime