給UIAlertView添加block實(shí)現(xiàn)

  • 使用"關(guān)聯(lián)對(duì)象"(Associated Object)存放自定義數(shù)據(jù)

可以給某對(duì)象關(guān)聯(lián)許多其它對(duì)象,這些對(duì)象通過(guò)"鍵"來(lái)區(qū)分。存儲(chǔ)對(duì)象值得時(shí)候,可以指明"存儲(chǔ)策略"(storage policy),用以維護(hù)相應(yīng)的"內(nèi)存管理語(yǔ)義"。
下列方法可以管理關(guān)聯(lián)對(duì)象:

void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)

此方法以給定的鍵和策略為某對(duì)象設(shè)置關(guān)聯(lián)對(duì)象值。

id objc_getAssociatedObject(id object, void *key)

此方法根據(jù)給定的鍵從某對(duì)象中獲取相應(yīng)的關(guān)聯(lián)對(duì)象值。

void objc_removeAssociatedObjects(id object)

此方法移除指定對(duì)象的全部關(guān)聯(lián)對(duì)象。

  • UIAlertView的block實(shí)現(xiàn)

typedef void(^CompleteBlock) (NSInteger buttonIndex);

@interface UIAlertView (Block)

// 用Block的方式回調(diào),這時(shí)候會(huì)默認(rèn)用self作為Delegate
- (void)showAlertViewWithCompleteBlock:(CompleteBlock) block;

@end
// 需要引入#import <objc/runtime.h>頭文件
@implementation UIAlertView (Block)

static void *key = "NTOAlertView";

- (void)showAlertViewWithCompleteBlock:(CompleteBlock)block
{
    if (block) {
        ////移除所有關(guān)聯(lián)
        objc_removeAssociatedObjects(self);
        objc_setAssociatedObject(self, key, block, OBJC_ASSOCIATION_COPY);
        ////設(shè)置delegate
        self.delegate = self;
    }
    ////show
    [self show];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    ///獲取關(guān)聯(lián)的對(duì)象,通過(guò)關(guān)鍵字。
    CompleteBlock block = objc_getAssociatedObject(self, key);
    if (block) {
        ///block傳值
        block(buttonIndex);
    }
}

使用起來(lái)很簡(jiǎn)單

// 需要引入#import "UIAlertView+Block.h"頭文件
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"myself title" message:@"alert message" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil];
        [alertView showAlertViewWithCompleteBlock:^(NSInteger buttonIndex) {
             NSLog(@"您點(diǎn)擊了%ld", buttonIndex);
        }];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,068評(píng)論 0 9
  • Objective-C作為面向?qū)ο缶幊?,“?duì)象”(object)就是“基本構(gòu)造單元”(building block...
    Mark_Lin閱讀 410評(píng)論 0 1
  • 出題者簡(jiǎn)介: 孫源(sunnyxx),目前就職于百度,負(fù)責(zé)百度知道 iOS 客戶端的開(kāi)發(fā)工作,對(duì)技術(shù)喜歡刨根問(wèn)底和...
    戈多_于勒閱讀 1,877評(píng)論 0 5
  • 自從在2016年抄了四十幾遍老子的《道德經(jīng)》后,我越來(lái)越能體會(huì)到清凈無(wú)為的妙處。 久染塵世,曾經(jīng)的我,有很強(qiáng)的嫉妒...
    楊春艷的番茄園閱讀 311評(píng)論 0 0
  • 事情發(fā)生在都市中心的一所醫(yī)院里,一個(gè)滿身纏著白布的人在角落里的病床上躺著,一旁的醫(yī)生和護(hù)士都在搖頭晃腦。 ...
    Cate魔王閱讀 187評(píng)論 0 2

友情鏈接更多精彩內(nèi)容