MacDev 板


LINE

版上大大看到一定会说category不能加member 请用subclass... 不过小弟还是想说明一下状况,也许大家会有更好的方法。 过去我都在玩cocos2d,CCNode里本身就有一个userdata的变数可以供自由使用。 然而在UIKit里的UIView似乎没有留下这样一个空间, 最简单的方式就是去继承UIView,然後自己塞一个id userdata进去。 但是我希望的是,所有继承UIView的class都有userdata可以用。 也就是说,如果能让UIView可以set/get userdata, 那UIImageView, UIScrollView, UIxxxView都可以有userdata可以用。 小弟在网路上爬文後,发现可以用Associate reference + catgegory的方式实现 测试也成功了,但是网路上没看到实际范例,所以想请版上大大们帮忙check一下 首先先建一个class //UserData.h #import <Foundation/Foundation.h> @interface UserData : NSObject { NSString *name; } @property (nonatomic, retain) NSString *name; @end //UserData.m #import "UserData.h" @implementation UserData @synthesize name; @end 再来是myuserdata category //myuserdata.h @interface UIView (myuserdata) - (void)setUserData:(NSString *)string; - (NSString *)userData; @end //myuserdata.m #import "myuserdata.h" #import "UserData.h" #import <objc/runtime.h> static char key; @implementation UIView (myuserdata) - (void)setUserData:(NSString *)string { if (!objc_getAssociatedObject(self, &key)) { UserData *data = [[UserData alloc] init]; objc_setAssociatedObject(self, &key, data, OBJC_ASSOCIATION_RETAIN_NONATOMIC); [data release]; } UserData *userdata = objc_getAssociatedObject(self, &key); userdata.name = string; } - (NSString *)userData { UserData *userdata = objc_getAssociatedObject(self, &key); return userdata.name; } @end 我是在iOS下UIViewController里测 - (void)viewDidLoad { [super viewDidLoad]; UIView *myclass = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; [myclass setBackgroundColor:[UIColor redColor]]; [myclass setUserData:@"this is myclass userdata"]; [self.view addSubview:myclass]; [myclass release]; NSLog([myclass userData]);   UIImageView *imag = [[UIImageView alloc] initWithFrame:CGRectMake(200, 200, 100, 100)]; [imag setImage:[UIImage imageNamed:@"AudioImage.png"]]; [imag setBackgroundColor:[UIColor blueColor]]; [imag setUserInteractionEnabled:YES]; [imag setUserData:@"this is imag userdata"]; [self.view addSubview:imag]; [imag release]; NSLog([imag userData]); } 可以work,这麽做是ok的吗? 还是有其它更好的方法? (不好意思,code直接放bbs,伤大家眼睛了) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.120.152 ※ 编辑: kevwalker 来自: 140.115.120.152 (03/25 12:18)
1F:推 popcorny:感谢分享..又学到一招!! 03/25 13:30
2F:→ ttflee:UIView的layer是Key-value compliant的。 03/25 20:04
3F:→ ttflee:详见 http://bit.ly/haM81w 03/25 20:05
4F:推 aecho:咦?Key-value compliant好棒,感谢分享。 03/26 02:49







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP