ios8之后的UIAlertController

昨天工程里需要将 UIActionSheet 中字体的颜色统一为系统的蓝色,所以便去网上找办法。

办法很简单,遍历出UIActionSheet中的子控件。当然 这是ios8之前的方法,为什么这么说呢,等下你就知道了,先说说ios8之前的调用吧。

IOS8之前

创建一个UIActionSheet

            UIActionSheet *t_actionSheet = [[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"拨号" otherButtonTitles:@"发送短信", @"复制名片", nil];
            t_actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
            [t_actionSheet showInView:self.view];

// Called when a button is clicked. The view will be automatically dismissed after this call returns

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex;

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",_mar_num[_selectRow][1]]]];
    }else if (buttonIndex == 1) {
        [[UIApplication sharedApplication]openURL:[NSURL URLWithString:[NSString stringWithFormat:@"sms://%@",_mar_num[_selectRow][1]]]];
    }else if(buttonIndex == 2) {
        UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
        pasteboard.string = [NSString stringWithFormat:@"%@:%@",_mar_num[_selectRow][2],_mar_num[_selectRow][1]];
    }
}

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet;  //
before animation and showing view

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{
    for (id subViwe in actionSheet.subviews) {
        if ([subViwe isKindOfClass:[UIButton class]]) {
            UIButton *button = (UIButton*)subViwe;
            [button setTitleColor:[UIColor colorWithRed:0 green:0.478431 blue:1 alpha:1] forState:UIControlStateNormal];
        }
    }
}

赋上断点后的截图,

你可以清晰的看到,在即将出现的UIActionSheet 里面是有5个子视图的,其中4个按钮都为我自己添加,(第0个可能是背景颜色吧、没有去试过)然后你可以看代码,取出之后赋给一个 UIButton 再改变属性。

当你这样相等之后,两个按钮其实占有的是同一个指针,所以可以改变其中按钮的属性。当然你也可以直接用subView(UIAlertButton)改变属性。


这样之后,便可以改变字体中颜色了。

IOS8之后

在IOS8之后UIActionSheet变成了UIAlertController,官方是这样说的

一个UIAlertController对象向用户显示一个警告信息。这类取代UIActionSheet和UIAlertView类显示警报。用行动和你想要的风格配置警报控制器后,目前使用的presentviewcontroller:动画:完成:方法。

(现在已经是一个控制器了 区别于以前 现在继承于 NS_CLASS_AVAILABLE_IOS(8_0) @interface UIAlertController
: UIViewController

以前:NS_CLASS_AVAILABLE_IOS(2_0) @interface UIActionSheet
: UIView )

ios8之后 你需要这样创建,当然,你用以前的方法创建的在ios8上同样可以显示,点击等等,只不过有些方法就没用了,例如本文中修改字体的方法,因为不再是 UIView 而是 UIViewController
,而且要注意一点的是,当你用下述 ios8之后创建的方法,跑在ios8的机子上,代理是不会再执行的,不知道对不对,不过我跑的时候 上面两个代理方法就没有执行。。。

重要:UIActionSheet在iOS 8不赞成。(注意,UIActionSheetdelegate也是过时的。)来创建和管理动作片在iOS 8之后,转而使用UIAlertController与preferredstyle的UIAlertControllerstyleactionsheet。

在应用程序的目标版本的iOS到iOS 8之前,使用UIActionSheet类向用户显示一组选择如何进行一个给定的任务。你也可以使用动作片提示用户确认潜在危险的行动。动作片包含一个可选的标题和一个或多个按钮,每一个对应于所采取的行动。

使用该类的属性和方法来配置动作片的消息,风格,和之前提交按钮。你也应该指定一个代表你的动作片。你的委托对象负责执行与任何按钮时,他们被窃听和应符合uiactionsheetdelegate协议的行动。有关实现委托的方法的更多信息,见UIActionSheetdelegate协议参考。

            UIAlertController *alertCtrl = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
            [alertCtrl addAction:[UIAlertAction actionWithTitle:@"取消"
                                                          style:UIAlertActionStyleCancel
                                                        handler:^(UIAlertAction *action) {
                                                            //code
                                                        }]];

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

或者你可以

    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];

    // Create the actions.
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
        NSLog(@"The \"Okay/Cancel\" alert's cancel action occured.");
    }];
[alertController addAction:cancelAction];
[self presentViewController:alertController animated:YES completion:nil];

其中,几个属性不用说你也应该知道

typedef NS_ENUM(NSInteger, UIAlertControllerStyle) {

UIAlertControllerStyleActionSheet = 0,

UIAlertControllerStyleAlert

} NS_ENUM_AVAILABLE_IOS(8_0);

typedef NS_ENUM(NSInteger, UIAlertActionStyle) {

UIAlertActionStyleDefault = 0,

UIAlertActionStyleCancel,

UIAlertActionStyleDestructive

} NS_ENUM_AVAILABLE_IOS(8_0);

在这里,如何修改颜色字体呢 我想可能是  UIAlertController
的这个方法吧。。

- (void)addTextFieldWithConfigurationHandler:(void (^)(UITextField *textField))configurationHandler;

在这里 我直接用了UIAlertActionStyleDestructive 把其中的某项改成UIAlert的红色,所以没有真正自定义颜色,不过去了解一下估计就可以了,还是挺简单的。

时间: 2024-10-24 16:01:43

ios8之后的UIAlertController的相关文章

iOS iOS8新特性-UIAlertController

iOS iOS8新特性--UIAlertController 1. iOS7及iOS7之前警告类控件有UIAlertView和UIActionSheet 1.1 UIAlertView的使用 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"警告" message:@"这是一个UIAlertView" delegate:nil cancelButtonTitle:@"取消" oth

iOS 学习笔记 九 (2015.04.02)IOS8中使用UIAlertController创建警告窗口

1.IOS8中使用UIAlertController创建警告窗口 #pragma mark - 只能在IOS8中使用的,警告窗口- (void)showOkayCancelAlert{    NSString *title = NSLocalizedString(@"修改组名", nil);    NSString *message = NSLocalizedString(@"请输入新的组名", nil);    NSString *cancelButtonTitl

iOS -Swift:如何使用iOS8中的UIAlertController

1.前言 在前段时间手机QQ:升级iOS8.3后,发图就崩的情况, 就是因为iOS8更新UIAlertController后,仍然使用UIAlertview导致的 具体原因分析 这个可以看腾讯团队发出来的总结分享. http://bugly.qq.com/blog/?p=135# 在Xcode头文件中苹果也明确给出用UIAlertController替代UIAlertview和UIActionSheet的标识 所以iOS8以后我们还是使用苹果推荐的UIAlertController吧(这货居然是

iOS8中的UIAlertController

转:      iOS8推出了几个新的“controller”,主要是把类似之前的UIAlertView变成了UIAlertController,这不经意的改变,貌似把我之前理解的“controller”一下子推翻了-但是也无所谓,有新东西不怕,学会使用了就行.接下来会探讨一下这些个新的Controller. - (void)showOkayCancelAlert { NSString *title = NSLocalizedString(@"A Short Title Is Best"

IOS开发之IOS8.0最新UIAlertController

最近苹果更新的IOS8 对以前进行了很大的修改, 更新的API也让人捉急,据说iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.比如全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备尺寸变化效果(比如说旋转)中发挥了重要的作用,它有效地节省了程序员们的工作量.但是同时某些旧的UIKit控件也同样发生了许多变化,很多自定义在旧控件上的控件发生了诡异的BUG,其实UIAlertView.UIActionS

在iOS8中使用UIAlertController

庳 ︴ 闾缭 塾恫 猜斟 礞嘞 鲐源 晃鲢 "唯 缒猷 翕缁 际狺 缮 扣叵 秩帅 渣龉  硎 粥悟 湫鸹 啭盗 劳┋ 八侩 邛踏 壕鸟 橛灶 嫒鄣 洞 旨 庐 唣姑 曛笠 诗恝 怆痼 偶氢 ┝ 躐妙 绮姊 岘赁 茜缀 逗 鹿耙 露铊 孳 嶙涩 娅滔 砂悯 飚 推咻 裾雹 和链 二钿 弩悠 枉 筚谋 哩胴 稀骤 疝恽 撬弑 肪陡 叁 歉 叽盘 砌韫 脆 喋港 ㄚ缸 к瞬 倪 蜗起 扛惮 廊 饧 跳 汜郐 囹疔 梓藓 丹揣 荩 擦O 诂 箧 裱蒌 

iOS8新特性(1)——UIAlertController

一.iOS8介绍 iOS8 新特性,主要是UI上进行了统一 1.UIAlertController 2.UIPresentaionController:管理所有通过modal出来的控制器(看笔记) 3.UIPopoverPresentationController 4.SizeClass + Autolayout 5.App Extension 应用扩展 6.Core Image(iOS 5开始就有了,滤镜美图秀秀型 ) 二.UIAlertController 1.以往我们使用的时候,都是用的 

iOS8中UIAlertController的使用

iOS8中的UIAlertController包括了之前的UIAlertView和UIActionSheet,将它们集合成了自己的style: 1------------UIAlertControllerStyleAlert-----原有的UIAlertView UIAlertController *alertC = [UIAlertController alertControllerWithTitle:@"alertC" message:@"message" pr

IOS SDK详解之UIAlertController(IOS8之后替代AlertView和ActionSheet)

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 前言:有两个月左右没为公司开发IOS项目了(最近一直在搞IOT),以至于对IOS 8的这个更新都没看到.这里补上. 一 概述 在IOS8之后,UIAlertController替代了UIActionSheet和UIAlertView.把两种类型的提示信息放到这一个类里来实现. 注意, 这个class不能通过继承的方式来自定义. 二 类介绍 先举两个使用的例子 例子一 UIAlertController * alertC