OC UIAlertView简化使用

//
//  UIAlertView+Additions.h
//  V6
//
//  Created by aidong on 15/8/12.
//  Copyright (c) 2015年 aidong. All rights reserved.
//

#import <UIKit/UIKit.h>

typedef void(^UIAlertViewCallBackBlock)(NSInteger buttonIndex);

@interface UIAlertView (Additions)<UIAlertViewDelegate>

@property (nonatomic ,copy) UIAlertViewCallBackBlock alertViewCallBackBlock;

/**
 *  简单的AlertView,只有一句简单的提示信息。
 *
 *  @param message:提示信息
 *
 *  使用方法:[UIAlertView simpleAlert:@""];
 */
+ (void)simpleAlert:(NSString *)message;

/**
 *  一个带多个参数的AlertView
 *
 *  @param alertViewCallBackBlock:block(NSInteger buttonIndex)
 *  @param title:名称
 *  @param message:提示信息
 *
 *  使用方法:

     [UIAlertView alertWithCallBackBlock:^(NSInteger buttonIndex){

     // 从左依次向右
     if (buttonIndex == 0) {

     NSLog(@"Press 0"); // 左边第一个button(cancelButton)

     }else if (buttonIndex == 1){
     NSLog(@"Press 1");
     }

     }title:@"提示" message:@"是否提交" cancelButtonName:@"NO" otherButtonTitles:@"YES"];
 *
 */
+ (void)alertWithCallBackBlock:(UIAlertViewCallBackBlock)alertViewCallBackBlock title:(NSString *)title message:(NSString *)message  cancelButtonName:(NSString *)cancelButtonName otherButtonTitles:(NSString *)otherButtonTitles, ...;

@end

//
//  UIAlertView+Additions.m
//  V6
//
//  Created by aidong on 15/8/12.
//  Copyright (c) 2015年 aidong. All rights reserved.
//

#import "UIAlertView+Additions.h"
#import <objc/runtime.h>

static void *UIAlertViewKey = @"UIAlertViewKey";

@implementation UIAlertView (Additions)

+ (void)simpleAlert:(NSString *)message{

    UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"提示" message:message delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
    [alert show];
}

+ (void)alertWithCallBackBlock:(UIAlertViewCallBackBlock)alertViewCallBackBlock title:(NSString *)title message:(NSString *)message  cancelButtonName:(NSString *)cancelButtonName otherButtonTitles:(NSString *)otherButtonTitles, ... {

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:nil cancelButtonTitle:cancelButtonName otherButtonTitles: otherButtonTitles, nil];
    NSString *other = nil;
    va_list args;
    if (otherButtonTitles) {
        va_start(args, otherButtonTitles);
        while ((other = va_arg(args, NSString*))) {
            [alert addButtonWithTitle:other];
        }
        va_end(args);
    }
    alert.delegate = alert;
    [alert show];
    alert.alertViewCallBackBlock = alertViewCallBackBlock;
}

- (void)setAlertViewCallBackBlock:(UIAlertViewCallBackBlock)alertViewCallBackBlock {

    [self willChangeValueForKey:@"callbackBlock"];
    /**
     1 创建关联(源对象,关键字,关联的对象和一个关联策略。)
     2 关键字是一个void类型的指针。每一个关联的关键字必须是唯一的。通常都是会采用静态变量来作为关键字。
     3 关联策略表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的;关联是原子的还是非原子的。这里的关联策略和声明属性时的很类似。
     */
    objc_setAssociatedObject(self, &UIAlertViewKey, alertViewCallBackBlock, OBJC_ASSOCIATION_COPY);
    [self didChangeValueForKey:@"callbackBlock"];
}

- (UIAlertViewCallBackBlock)alertViewCallBackBlock {

    return objc_getAssociatedObject(self, &UIAlertViewKey);
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

    if (self.alertViewCallBackBlock) {
        self.alertViewCallBackBlock(buttonIndex);
    }
}

/**
 OC中的关联就是在已有类的基础上添加对象参数。来扩展原有的类,需要引入#import <objc/runtime.h>头文件。关联是基于一个key来区分不同的关联。
 常用函数: objc_setAssociatedObject     设置关联
 objc_getAssociatedObject     获取关联
 objc_removeAssociatedObjects 移除关联
 */

@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 15:49:27

OC UIAlertView简化使用的相关文章

swift 初步接触 基本语法 方法命名 (一)

今天研究了一下swift语言,随便找了小demo,一点研究swift语法精髓,整体下来感觉很舒服,就是了解语法废了些时间,我感觉swift语言初期很难了解,不过理解过了之后,你才能真正的体会到这个语言的方便之处,没有过多的累赘,这个语言还真的是门不错的语言,废话不多说,记录下自己的理解笔记,如果有什么不对的大家多多指教....... 这个是UIViewController实现代码 //导入框架 import UIKit //文件的入口,也就是主要编辑程序的地方 class ViewControl

【OC学习-9】利用@property属性和@synthesize简化实例变量的存取器方法

如果我们在一个类中定义了3个实例变量,那么如果要写存取器方法的话,需要写6个(每个实例变量各一个setter和getter).现在的简化方法是: (1)在类的.h文件里,只要写了属性,那么这个实例变量就可以被操作,如果想要不被操作保证安全,那么就不要声明属性,只要写在实例变量里即可. #import <Foundation/Foundation.h> //我们一般会省略实例变量的写法,因为写了属性后,一般会自动生成同名的实例变量 @interface ASStudent : NSObject{

oc常见误区

1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行 3.GET请求,将参数直接写在访问路径上.操作简单,不过容易被外界看到,安全性不高,地址最多255字节: 4.POST请求,将参数放到body里面.POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获. 查看源码打印?

iOS开发基础----OC/UI控件

1. 前缀-> 只是代码组合之后,用来区分谁写的代码 2. 工具包frameworks 总共4个工具包,前3个是经常用的,最后一个是测试用的. 3. iphone 6 的SDK 是建立在 ios 8.0以上的 4.ios的界面虽然发生了改变,但还是从main.m中执行的,只是main.m没有放在导航区,而是放在Supporting Files 分组中.注意不是文件夹,是分组. main.m里有这个 return UIApplicationMain(argc, argv, nil, NSStrin

iOS开发——面试篇&amp;OC基本语法总结(面试)

OC基本语法总结(面试) C和OC对比 OC中主要开发在什么平台上的应用程序? 答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头? 答:OC中新增关键字大部分是以@开头 OC中新增加了那些数据类型? 答: Block类型 指针类型(Class, id类型) 空类型 特殊类型(SEL, nil) 面向对象特性是什么? 答:继承性,封装性,多态性 import和#include有什么区别? 答:import 的功能和 include一样, 是将右边的

OC的基本概念

1.OC头文件为#import <Foundation/Foundation.h>意思为导入基础框架:2.输出形式为NSlog(@“格式声明");  @autoreleasepool,自动释放池:3.具有bool型变量(YES,NO);自己定义类:在工程名文件上右击鼠标,点击NEW file,选择sorce,点击cocoa class点击下一步,就会生成.h和.文件.4.OC:面向对象语言:面向过程重要为函数,以函数为单位,面向对象语言重要用类:以类为单位,用#import导入文件,

Swift基本语法及与OC比较之二

1 //MARK:-----------------控制流----------------- 2 //MARK: 1.for - in 循环 ,不用声明Value类型 3 4 //for value in 1...6 { 5 //print(value) 6 // 7 //} 8 9 10 //不需要具体的值,只是为了得到循环次数 11 12 //for _ in 1...6 { 13 //print("123") 14 //} 15 16 17 //MARK: 2.for循环,和C一

024-Foundation框架(下)-OC笔记

学习目标 1.[理解]NSDictionary 2.[了解]NSDictionary的常用方法 3.[掌握]NSDictionary的遍历 4.[理解]NSMutableDictionary 5.[了解]NSFileManager 6.[了解]Foundation常用结构体 7.[了解]NSNumber 8.[了解]NSValue 9.[了解]NSDate 10.[了解]集合的内存管理 11.[了解]copy和mutableCopy 12.[理解]单例模式 一.NSDictionary NSAr

OC面向对象—多态

一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. Animal类的声明 Animal类的实现 Dog类继承自Animal类 Dog类的实现 测试程序: 二.使用注意 代码分析: Dog *d=[[Animal  alloc] init];   动物是一条狗?语义正确吗? NSString *str=[Dog  new];     狗是一个字符串?正确吗? Oc语言是