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燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP