iOS UIAlertController中Message和Ti

作者: Senior丶 | 来源:发表于2016-05-18 16:01 被阅读7113次
美图镇楼
  • 首先,先放一个正常的UIAlertController:
    8C6000A6-6EDE-4C89-BDE3-5CCEDBBDA4E2.png
    1.现在的titlemessage都是居中对齐的, 但是如果我们想让他左对齐或者右对齐该怎么做呢, 这里我查UIAlertController中的属性并没有titleLabelmessageLabel.说明这两个label是隐藏的.外界不能直接访问的.
    2.但是通过找UIAlertControllersubviews终于找到了
 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

BE8D95C9-F6A9-4B57-9F7E-F3BA3F101A3E.png
4.这样我们就可以拿到titleLabelmessageLabel来做设置了
    //比如设置message内容居左:
    message.textAlignment = NSTextAlignmentLeft;
    title.textAlignment = NSTextAlignmentLeft;
  • 但是经过尝试发现,这个可修改的属性实在是太少了.如果还满足不了需求怎么办,比如改变字体颜色,大小等等...,这是可以考虑富文本
    1.先看一下效果:
    A74554DA-0907-485D-8893-4FB8EDC7462B.png
    这里我们改变了titlemessage,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 富文本.
  • 如有错误,欢迎雅正

相关文章

网友评论

  • 云画的跃光:我想知道,message里面的内容可不可自动换行显示
    陈永发:@云画的跃光 明白了,我现在设置了文本左对齐
    云画的跃光:@陈永发 我是因为文字做了去除空白字符的操作,把这操作去掉之后,在message显示是左对齐和自动换行的
    陈永发:我也同问呀,message里面的文字排版,怎么做到左对齐
  • 62737ae69891:问个问题咧,这个弹窗能不能显示多条文本信息。比如我自定义的5个NSString,然后分别显示出来
  • 偲源:IOS8.1的模拟器会崩,不知道笔者试过没
    开发仔小广:titleTextColor这个属性的问题,这个属性是iOS 8.3及其以后才有的,
    NSComparisonResult compare = [[UIDevice currentDevice].systemVersion compare:@"8.3"];
    if (compare == NSOrderedDescending || compare == NSOrderedSame) {
    [cancleAction setValue:[UIColor orangeColor] forKey:@"titleTextColor"];
    }
    判断一下系统就ok了
  • yufei_L:朋友,请问一下。使用"attributedTitle"或者"attributedMessage"感觉有点危险,因为有可能因为"使用私有方法"而导致app被拒。你试验过吗?
    Senior丶:@yufei_L 试过啊,没问题。只要不是大范围使用kvc,就没问题的啊:blush:
  • 牵匹爱马仕:请问下,这5个 uiview 说明了5个层次吗?缺一不可?
    Senior丶:@牵匹爱马仕 对,

本文标题:iOS UIAlertController中Message和Ti

本文链接:https://www.haomeiwen.com/subject/ppjwrttx.html