点按钮的时候,给alertView添加一个关联对象(被点击这个按钮),
objc_setAssociatedObject(alert, &kRepresentedObject,
sender,
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
在UIAlertViewDelegate中取出关联对象(被点击的按钮)
UIButton *sender = objc_getAssociatedObject(alertView,
&kRepresentedObject);
&kRepresentedObject到底是什么东西,
kRepresentedObject从哪里来
static const char kRepresentedObject;
为什么会用char??
主要代码如下 ,
#import "ViewController.h"
#import <objc/runtime.h> @implementation ViewController static const char kRepresentedObject;
#pragma mark - event response
/** 按钮事件 */
- (IBAction)doSomething:(id)sender {
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Alert" message:nil
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
objc_setAssociatedObject(alert, &kRepresentedObject,
sender,
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[alert show]; }
#pragma mark - UIAlertViewDelegate
/** UIAlertViewDelegate */
- (void)alertView:(UIAlertView *)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex {
UIButton *sender = objc_getAssociatedObject(alertView,
&kRepresentedObject);
self.buttonLabel.text = [[sender titleLabel] text];
}
@end
让我们再来看看其他关联对象是如何关联的
在分类中加入了几个属性
#import <Foundation/Foundation.h>
#import "XTableViewCellItem.h" @interface NSArray (YDTableSectionView) @property (nonatomic, strong) XTableViewCellItem *sectionHeaderItem; @property (nonatomic, strong) XTableViewCellItem *sectionFooterItem; @end @interface YDtableSectionView : UIControl @property (nonatomic, strong) XTableViewCellItem *sectionItem; @end
m文件中这样实现
#import "NSArray+YDTableSectionView.h"
#import <objc/runtime.h> @implementation NSArray (YDTableSectionView) - (void)setSectionHeaderItem:(XTableViewCellItem *)sectionHeaderItem
{
objc_setAssociatedObject(self, "sectionHeaderItem", sectionHeaderItem, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
} - (XTableViewCellItem *)sectionHeaderItem
{
return objc_getAssociatedObject(self, "sectionHeaderItem");
} - (void)setSectionFooterItem:(XTableViewCellItem *)sectionFooterItem
{
objc_setAssociatedObject(self, "sectionFooterItem", sectionFooterItem, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
} - (XTableViewCellItem *)sectionFooterItem
{
return objc_getAssociatedObject(self, "sectionFooterItem");
} @end
用的是
"sectionFooterItem"
而非
@"sectionFooterItem"
最上面用的是
static const char kRepresentedObject;
char kRepresentedObject;说是有是“”而非@“”
static 局部,本文件访问
const 常量,不变