UIAlertController 简单修改title以及按钮的字体颜色
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以及按钮的字体颜色相关推荐
- html改游戏聊天字体颜色,html点击按钮改变字体颜色怎么实现
html点击按钮改变字体颜色的实现方法:1.创建一个html文件:2.在html文件中添加html代码架构:3.在body标签里面使用button标签实现一个按钮,并使用style给按钮添加样式以及使 ...
- html给按钮加颜色代码,css按钮属性 html中按钮的字体颜色怎么设置?
css 属性设置input 中type为button 的属性 css中什么属性可以控制按钮的形状 1.dispaly 适用于css1和css2,用于设置目标对象是否及如何显示.该属性的常用值为none ...
- 修改React Native Android'默认字体颜色为黑色
修改React Native Android'默认字体颜色为黑色 找到res/values/styles.xml文件插入代码 <style name="AppTheme" p ...
- ios设置字体-黑体,加粗等 修改textField的placeholder的字体颜色、大小
ios开发中,经常用到UILable,此时如何让UILable的字体变化为不同的颜色,样式,从而增加UI美感呢?下面我进行了总结和归纳,内容来自于网络,当时经过我自己的整理.希望对我自己和大家有所帮助 ...
- 修改Arduino IDE背景和字体颜色
目录 修改背景颜色 修改字体颜色 修改单行注释的颜色 修改多行注释的颜色 修改控制台颜色 十六进制颜色码 修改背景颜色 打开arduino的安装文件夹>lib>theme>theme ...
- 安卓修改顶部状态栏背景色和字体颜色
在AndroidManifest文件: <application...android:theme="@style/xxxx"> 点进theme: <style n ...
- 修改Linux终端命令行字体颜色(对比明显,超炫酷)
环境: ubuntu 18.04 :当前在虚拟机,但是测试在系统里也是可以实现的 步骤: 1.在 ~/.bashrc最后一行 写入下面这行代码 echo "PS1='${debian_chr ...
- 修改YAML/YML文件的字体颜色
修改颜色的路径如下: Setting => Editor => Color Scheme => YAML
- 微信小程序点击按钮变字体颜色
微信小程序开发: 实现一个按钮,和一段文字"Hello World",点击时依次按照"红,绿,蓝,绿"的次序循环变换文字颜色.即:红,绿,蓝,绿,红,绿,蓝,绿 ...
最新文章
- 2018-3-6 (论文—网络评论中非结构信息应用于研究)笔记-----论文中的特征抽取的模型算法
- 硅谷产品实战-总结:23、增长的核心在于减少用户阻力
- 信用卡消费退款,商家让客户付手续费,合理吗?
- Amazon S3 设置对象的生命周期Lifecycle
- 宅在家里写数据库中排序和分页
- matlab平滑曲线_梯度下降法实现路径平滑
- redis命令_Redis 命令执行过程(上)
- 易捷行云EasyStack 云平台携手飞腾S2500推动国产化云生态建设
- 1919 Problem A 二叉排序树
- 【论文笔记】Hierarchical Paired Channel Fusion Network for Street Scene Change Detection
- Java如何设置word中某段文字的字体/段落样式
- html给文字添加下划线
- 【异步电路碎碎念1】 —— 到底什么是异步电路
- arm指令集:精简指令集、复杂指令集
- 搭建React项目,超简单教程
- JAVA算法:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合(JAVA)
- adlds文件服务器,修改 AD LDS 配置
- ios关于农历的一些操作
- 把自己当成人物是最傻的表现zz
- 每日一面 - mysql中,innodb表里,某一条数据删除了之后,这条数据会被真实的擦掉吗,还是删除了关系?