https://www.jianshu.com/p/cecd1b4bbf27

欢迎加入 iOS开发QQ群:151133690

实现此效果的另一种简单调用方式已经上传到gitHub,请移步https://github.com/benben-hello/BBAlertController

先来几张效果图吧:

苦逼的开发者,最终败给了一个任性的UI,系统原生UIAlertController的按纽颜色必须改.于是,开始了不归路.
之前的版本是自己用view写的一个仿系统UIActionSheet,动画感觉都挺好,就是毛玻璃背景没有系统的好,由于最低兼容了ios8,所以就抛弃了UIActionSheet,改用UIAlertController.

做法其实很简单,采用runtime机制.对于runtime不了解的,我想还是别看各种介绍文章了,找一个简单的demo多写几遍,就行了.

做法很简单,自己写一个类 继承自UIAlertController,还是先把.h和.m的代码都给大家吧.

SCAlertController.h

//

//  SCAlertController.h

//  SCAlertController

//

//  Created by it3部01 on 16/8/3.

//  Copyright © 2016年 benben. All rights reserved.

//

#import <UIKit/UIKit.h>

@interface SCAlertAction : UIAlertAction

@property (nonatomic,strong) UIColor *textColor; /**< 按钮title字体颜色 */

@end

@interface SCAlertController : UIAlertController

@property (nonatomic,strong) UIColor *tintColor; /**< 统一按钮样式 不写系统默认的蓝色 */

@property (nonatomic,strong) UIColor *titleColor; /**< 标题的颜色 */

@property (nonatomic,strong) UIColor *messageColor; /**< 信息的颜色 */

@end

SCAlertController.m

//

//  SCAlertController.m

//  SCAlertController

//

//  Created by it3部01 on 16/8/3.

//  Copyright © 2016年 benben. All rights reserved.

//

#import "SCAlertController.h"

#import <objc/runtime.h>

@implementation SCAlertAction

//按钮标题的字体颜色

-(void)setTextColor:(UIColor *)textColor

{

_textColor = textColor;

unsigned int count = 0;

Ivar *ivars = class_copyIvarList([UIAlertAction class], &count);

for(int i =0;i < count;i ++){

Ivar ivar = ivars[i];

NSString *ivarName = [NSString stringWithCString:ivar_getName(ivar) encoding:NSUTF8StringEncoding];

if ([ivarName isEqualToString:@"_titleTextColor"]) {

[self setValue:textColor forKey:@"titleTextColor"];

}

}

}

@end

@implementation SCAlertController

-(void)viewDidLoad

{

[super viewDidLoad];

unsigned int count = 0;

Ivar *ivars = class_copyIvarList([UIAlertController class], &count);

for(int i = 0;i < count;i ++){

Ivar ivar = ivars[i];

NSString *ivarName = [NSString stringWithCString:ivar_getName(ivar) encoding:NSUTF8StringEncoding];

//标题颜色

if ([ivarName isEqualToString:@"_attributedTitle"] && self.title && self.titleColor) {

NSMutableAttributedString *attr = [[NSMutableAttributedString alloc]initWithString:self.title attributes:@{NSForegroundColorAttributeName:self.titleColor,NSFontAttributeName:[UIFont boldSystemFontOfSize:14.0]}];

[self setValue:attr forKey:@"attributedTitle"];

}

//描述颜色

if ([ivarName isEqualToString:@"_attributedMessage"] && self.message && self.messageColor) {

NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:self.message attributes:@{NSForegroundColorAttributeName:self.messageColor,NSFontAttributeName:[UIFont systemFontOfSize:14.0]}];

[self setValue:attr forKey:@"attributedMessage"];

}

}

//按钮统一颜色

if (self.tintColor) {

for (SCAlertAction *action in self.actions) {

if (!action.textColor) {

action.textColor = self.tintColor;

}

}

}

}

@end

一般来说对于SCAlertController里面的属性应该像SCAlertAction一样放在setter方法里面修改,这里我表示为了方便就放在这个方法里面了.

-(void)viewDidLoad

{

[super viewDidLoad];

}

用法就很简单了,和系统原生UIAlertController一样,只是把UI换成SC,当然你可以改成自己喜欢的,但是别忘了改完.

SCAlertController *alertController = [SCAlertController alertControllerWithTitle:@"你确定要退出吗?" message:nil preferredStyle:UIAlertControllerStyleActionSheet];

alertController.tintColor = [UIColor redColor]; //这里统一设置各个按钮的颜色都为红色.

当然,你还可以自定义某一个按钮的颜色.比如下面的取消按钮

alertController.titleColor = [UIColor redColor];

//取消

SCAlertAction *cancelAction = [SCAlertAction actionWithTitle:@"我不想退出" style:UIAlertActionStyleCancel handler:nil];

//单独修改一个按钮的颜色

cancelAction.textColor = [UIColor greenColor];

[alertController addAction:cancelAction];

//退出

SCAlertAction *exitAction = [SCAlertAction actionWithTitle:@"退出" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

}];

[alertController addAction:exitAction];

[self presentViewController:alertController animated:YES completion:nil];

}

作者:青春微凉来时路

链接:https://www.jianshu.com/p/cecd1b4bbf27

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/sundaysgarden/p/10309546.html

UIAlertController 简单修改title以及按钮的字体颜色相关推荐

  1. html改游戏聊天字体颜色,html点击按钮改变字体颜色怎么实现

    html点击按钮改变字体颜色的实现方法:1.创建一个html文件:2.在html文件中添加html代码架构:3.在body标签里面使用button标签实现一个按钮,并使用style给按钮添加样式以及使 ...

  2. html给按钮加颜色代码,css按钮属性 html中按钮的字体颜色怎么设置?

    css 属性设置input 中type为button 的属性 css中什么属性可以控制按钮的形状 1.dispaly 适用于css1和css2,用于设置目标对象是否及如何显示.该属性的常用值为none ...

  3. 修改React Native Android'默认字体颜色为黑色

    修改React Native Android'默认字体颜色为黑色 找到res/values/styles.xml文件插入代码 <style name="AppTheme" p ...

  4. ios设置字体-黑体,加粗等 修改textField的placeholder的字体颜色、大小

    ios开发中,经常用到UILable,此时如何让UILable的字体变化为不同的颜色,样式,从而增加UI美感呢?下面我进行了总结和归纳,内容来自于网络,当时经过我自己的整理.希望对我自己和大家有所帮助 ...

  5. 修改Arduino IDE背景和字体颜色

    目录 修改背景颜色 修改字体颜色 修改单行注释的颜色 修改多行注释的颜色 修改控制台颜色 十六进制颜色码 修改背景颜色 打开arduino的安装文件夹>lib>theme>theme ...

  6. 安卓修改顶部状态栏背景色和字体颜色

    在AndroidManifest文件: <application...android:theme="@style/xxxx"> 点进theme: <style n ...

  7. 修改Linux终端命令行字体颜色(对比明显,超炫酷)

    环境: ubuntu 18.04 :当前在虚拟机,但是测试在系统里也是可以实现的 步骤: 1.在 ~/.bashrc最后一行 写入下面这行代码 echo "PS1='${debian_chr ...

  8. 修改YAML/YML文件的字体颜色

    修改颜色的路径如下: Setting => Editor => Color Scheme => YAML

  9. 微信小程序点击按钮变字体颜色

    微信小程序开发: 实现一个按钮,和一段文字"Hello World",点击时依次按照"红,绿,蓝,绿"的次序循环变换文字颜色.即:红,绿,蓝,绿,红,绿,蓝,绿 ...

最新文章

  1. 2018-3-6 (论文—网络评论中非结构信息应用于研究)笔记-----论文中的特征抽取的模型算法
  2. 硅谷产品实战-总结:23、增长的核心在于减少用户阻力
  3. 信用卡消费退款,商家让客户付手续费,合理吗?
  4. Amazon S3 设置对象的生命周期Lifecycle
  5. 宅在家里写数据库中排序和分页
  6. matlab平滑曲线_梯度下降法实现路径平滑
  7. redis命令_Redis 命令执行过程(上)
  8. 易捷行云EasyStack 云平台携手飞腾S2500推动国产化云生态建设
  9. 1919 Problem A 二叉排序树
  10. 【论文笔记】Hierarchical Paired Channel Fusion Network for Street Scene Change Detection
  11. Java如何设置word中某段文字的字体/段落样式
  12. html给文字添加下划线
  13. 【异步电路碎碎念1】 —— 到底什么是异步电路
  14. arm指令集:精简指令集、复杂指令集
  15. 搭建React项目,超简单教程
  16. JAVA算法:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合(JAVA)
  17. adlds文件服务器,修改 AD LDS 配置
  18. ios关于农历的一些操作
  19. 把自己当成人物是最傻的表现zz
  20. 每日一面 - mysql中,innodb表里,某一条数据删除了之后,这条数据会被真实的擦掉吗,还是删除了关系?

热门文章

  1. 使用session防止表单进行重复提交
  2. 无法加载指定的元数据资源(转载)
  3. 函数声明与函数表达式
  4. Codeforces Round #443 (Div. 2) B. Table Tennis
  5. 九度oj 题目1354:和为S的连续正数序列
  6. 使用memcache的session入库
  7. c#将对象序列化为字符串和将字符串反序列化为对象
  8. 《Thinking in UML》读书笔记之一
  9. CloudStack API编程指南
  10. C++容器适配器之priority_queue