2013-12-12 105 views
0

有什麼辦法可以將一些數據(例如NSString)附加到UIView中嗎? (類似[view setMetadata:@"username"])。如何將元數據附加到視圖?

讓我解釋一下我需要實現的。我以編程方式創建一些UIButtons,用於觸摸顯示用戶的個人資料。他們都會觸發一個方法,但是當這個方法被調用時,我需要知道應該去哪個用戶。作爲一種解決方法,我可以使用NSDictionary,其中的鍵是數字,並設置視圖標籤以匹配這些數字,但我不知道是否有更好的方式。

+3

子類'UIView',然後添加你需要的屬性? – dandan78

+0

@ dandan78你應該寫這個作爲正確的答案,因爲這是很好的建議,如果沒有比這更好的東西出現,我會接受它。 –

+0

你在做什麼是一個好方法。 UIView框架不支持將任意指針與視圖相關聯。使用標籤就好了。 – rmaddy

回答

2

如果我更仔細地閱讀你的問題,我會建議繼承UIButton而不是UIView。無論如何,原則是相同的:子類,然後添加必需的屬性,並在必要時(例如在action:方法中)投射到您的子類並檢索數據。

由於我們已經在討論子類,所以實際上可以從您的示例中添加setMetadata:方法,並使用它來存儲idNSDictionary或類似的東西。

2

您可以添加標籤到視圖。標籤只是一個數字,所以你不能將它用於字符串。你可以使用一個NSDictionary字符串數據key'd作爲標籤使用的數字。

+0

您可以使用'UIView'對象作爲字典的鍵來簡化此操作。這樣你根本不用擔心標籤。 – Macondo2Seattle

2

爲了完整起見,還有一種方法。您可以使用類別和objc_setAssociatedObject函數將屬性添加到類中。例如,參見this tutorial

我個人更喜歡Stephen Johnson的解決方案。

1

您提出的建議是完成您想要完成的任務的好方法,但請記住一點:在iOS中,您最常遵循MVC design pattern。在MVC中,視圖通常是「愚蠢的」對象,只是負責顯示你給他們的任何信息*。因此,您可能需要重新設計您的解決方案,以便信息不被視圖保存,而是由掌握了您的視圖和模型的控制器保存。它有時看起來像是一個不必要的步驟,但有很好的理由讓分離變得越來越明顯。

*請注意,該規則的例外情況是從用戶那裏獲取信息的輸入視圖,但即使在這些情況下,控制器也會查詢這些視圖以獲取其信息。