- 首先,先放一个正常的
UIAlertController
:
1.现在的title
和message
都是居中对齐的, 但是如果我们想让他左对齐或者右对齐该怎么做呢, 这里我查UIAlertController
中的属性并没有titleLabel
和messageLabel
.说明这两个label
是隐藏的.外界不能直接访问的.
2.但是通过找UIAlertController
的subviews
终于找到了
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"物品详情" message:@"轻便的移动电源很容易就电量耗尽,而大容量的移动电源往往都比较笨重,这样的体验远远比不上直接更换电池。\n对于许多 iPhone 重度使用者来说,手机续航时间不足是一个一直困扰着他们的问题,当然,从智能手机开始采用不可拆卸电池设计开始,这个问题就已经存在了。在电池技术没有突破的情况下,移动电源成为了解决这个问题的最佳方案。" preferredStyle:UIAlertControllerStyleAlert];
UIView *subView1 = alertController.view.subviews[0];
UIView *subView2 = subView1.subviews[0];
UIView *subView3 = subView2.subviews[0];
UIView *subView4 = subView3.subviews[0];
UIView *subView5 = subView4.subviews[0];
NSLog(@"%@",subView5.subviews);
//取title和message:
UILabel *title = subView5.subviews[0];
UILabel *message = subView5.subviews[1];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:nil];
[alertController addAction:cancelAction];
[self presentViewController:alertController animated:YES completion:nil];
3.控制台打印出subView5.subviews
4.这样我们就可以拿到
titleLabel
和messageLabel
来做设置了
//比如设置message内容居左:
message.textAlignment = NSTextAlignmentLeft;
title.textAlignment = NSTextAlignmentLeft;
- 但是经过尝试发现,这个可修改的属性实在是太少了.如果还满足不了需求怎么办,比如改变字体颜色,大小等等...,这是可以考虑富文本
1.先看一下效果:
这里我们改变了title
和message
,cancelAction
按钮的颜色,大小等等.
2.其实很简单我直接上代码:
//修改title
NSMutableAttributedString *alertControllerStr = [[NSMutableAttributedString alloc] initWithString:@"物品详情"];
[alertControllerStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 2)];
[alertControllerStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:17] range:NSMakeRange(0, 2)];
[alertController setValue:alertControllerStr forKey:@"attributedTitle"];
//修改message
NSMutableAttributedString *alertControllerMessageStr = [[NSMutableAttributedString alloc] initWithString:@"轻便的移动电源很容易就电量耗尽,而大容量的移动电源往往都比较笨重,这样的体验远远比不上直接更换电池。"];
[alertControllerMessageStr addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(0, 10)];
[alertControllerMessageStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(11, 20)];
[alertControllerMessageStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(20, 30)];
[alertController setValue:alertControllerMessageStr forKey:@"attributedMessage"];
//修改按钮的颜色
[cancelAction setValue:[UIColor orangeColor] forKey:@"titleTextColor"];
3.这个方法其实就是通过KVC来实现的.如果不懂得KVC可以看看iOS KVC简单理和iOS 用KVC来自定义Tabbar,如果不清楚富文本的可以看iOS 富文本.
-
如有错误,欢迎雅正