IOS執行時傳遞物件或者新增屬性
之前做一個專案時,碰到一個問題,為一個UITableViewCell中的不同按鈕繫結不同的物件,點選按鈕後獲取繫結的相應的物件。目前我所知道的有兩種方式可以實現該需求。1.使用IOS提供的執行時 2.之定義UIButton,為其設定屬性。下面介紹第一種方式:
一、使用執行時必須首先匯入:
#import "objc/runtime.h"
二、繫結物件:
objc_setAssociatedObject(<#id object#>, <#const void *key#>, <#id value#>, <#objc_AssociationPolicy policy#>);這個方法可以讓一個物件和另一個物件關聯,就是說一個物件可以保持對另一個物件的引用,並獲取那個物件。引數分別表示:關聯的源物件、與物件關聯的鍵、關聯鍵的值、關聯的協議。關聯協議可以參考objc_AssociationPolicy,關聯的鍵一般是地址如:static
char operationKey; 使用&operationKey作為鍵。值得型別是id。
三、獲取繫結的物件:
objc_getAssociatedObject(<#id object#>, <#const void *key#>);
四、例項應用,為UIButton繫結值:
//繫結值或物件
static const char * const kZSYPopoverListButtonClickForCancel = "kZSYPopoverListButtonClickForCancel";
objc_setAssociatedObject(self.cancelButton, kZSYPopoverListButtonClickForCancel, [block copy], OBJC_ASSOCIATION_RETAIN);
//獲取值或者物件
UIButton *button = (UIButton *)sender;
block = objc_getAssociatedObject(sender, kZSYPopoverListButtonClickForCancel);