UIAlertViewController 基本使用+自定义(字体颜色,大小,对齐方式)

本文介绍了如何使用UIAlertViewController进行基本操作,并展示了如何通过KVO修改title和message的字体、颜色及大小。此外,还提供了设置对齐方式的方法,包括递归查找message标签并调整其对齐属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来用alertview好好地,最终还是转战alertViewController了,,笔记而已,会有补充。。

1、基本使用

这里不赘述 网上很多,这里贴一个觉得还不错的链接:点击打开链接


2、利用kvo修改title和message的颜色大小font等

(具体想改哪些 请参考富文本的设定,如果要问我富文本是啥,请不吃稻的同鞋自助研究,这里给个举例链接:富文本富文本(简书)

方法:

[alertController setValue:attrStr forKey:@"attributedTitle"];//修改title的,就是第一行标题

[alertController setValue:attrStr forKey:@"attributedMessage"];//修改message,就是下一行小字的提示信息

代码举例:

[attrStr addAttribute:NSFontAttributeName

                  value:[UIFont fontWithName:@"NotoSansCJKsc-Bold" size:14]

                  range:NSMakeRange(0, message.length)];

    [attrStr addAttribute:NSForegroundColorAttributeName value:[Tools colorWithHexString:@"#0b0b0b"] range:NSMakeRange(0, message.length)];

    [alertController setValue:attrStr forKey:@"attributedMessage"];


很明显,中间的message内容已经变为粗体了,title就是同理。(但是这种方法,富文本没办法设置对齐方式)


3、设置对齐

鄙人不才,首先想到的是理所当然觉得找到message这个label然后修改他的对齐方式就可以了,那么关键就是找到这个label

alertview的找到message方法:

//UIAlertview是实现了一个代理方法:

- (void)willPresentAlertView:(UIAlertView *)alertView

{

    for( UIView * view in alertView.subviews) {

        if( [view isKindOfClass:[UILabel class]]) {

            

            UILabel* label = (UILabel*) view;

            label.textAlignment = UITextAlignmentLeft;

            

        }

    }

}

那么、alertViewController 呢?

//UIalertViewController找到message这个label关联了六层视图,可以通过xcode“Debug View Hierarchy”功能看到


//*******简单粗暴点********

UIView *subView1 = alert.view.subviews[0];

UIView *subView2 = subView1.subviews[0];

UIView *subView3 = subView2.subviews[0];

UIView *subView4 = subView3.subviews[0];

UIView *subView5 = subView4.subviews[0];

//titlemessage

UILabel *title = subView5.subviews[0];

UILabel *message = subView5.subviews[1];

//然后设置message内容居左:

message.textAlignment = NSTextAlignmentLeft;



//********利用递归方法********

//写一个递归找到messageParentView;

UIView *messageParentView = [self getParentViewOfTitleAndMessageFromView:alertController.view];

    if (messageParentView && messageParentView.subviews.count > 1) {

         UILabel *messageLb = messageParentView.subviews[1];

         messageLb.textAlignment = NSTextAlignmentLeft;

      }


//递归方法

- (UIView *)getParentViewOfTitleAndMessageFromView:(UIView *)view {

        for (UIView *subView in view.subviews) {

                if ([subView isKindOfClass:[UILabel class]]) {

                        return view;

                    }else{

                            UIView *resultV = [self getParentViewOfTitleAndMessageFromView:subView];

                            if (resultV) return resultV;

                        }

            }

        return nil;

}

最后是效果:




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值