Добавить данные в UIView с помощью категорий

Я хотел бы расширить класс iOS UIView, чтобы я мог хранить некоторые свои собственные данные и состояние в моих экземплярах UIView. Я новичок в iOS. Я понимаю, что я не могу добавлять переменные экземпляра в категории, поэтому, по-видимому, я не могу добавить новое состояние в свои UIViews.

Поэтому я думаю о создании NSArray, где каждый из моих UIViews имеет уникальный тег, который затем используется в качестве индекса в NSArray, и где каждый элемент в NSArray содержит дополнительную информацию о состоянии этого конкретного UIView. Недостатком здесь является управление тегами и NSArray. Было бы намного проще, если бы я мог просто добавить состояние напрямую в любой UIView через категорию.

Может ли кто-нибудь посоветовать мне лучший способ добавить некоторые переменные экземпляра и состояние в UIViews? Я использую множество подклассов UIView, поэтому не очень хочу создавать подклассы UIView.

Спасибо.


person whatdoesitallmean    schedule 04.06.2012    source источник


Ответы (2)


Ассоциативные ссылки позволят вам делать то, что вы хотите, хотя я не уверен, почему вы не хотите создавать подклассы (вы уже говорите, что у вас много подклассов - возможно, лучшая стратегия подкласса будет лучше решение?).

person Vladimir Gritsenko    schedule 04.06.2012
comment
Привет, Владимир - причина (возможно, ошибочно), что я не хочу создавать подклассы, заключается в том, что я использую множество элементов пользовательского интерфейса (таких как UITextField, UIImageView, UIButton и т. Д.), И мне нужен каждый из них (все они происходят от UIView) чтобы «унаследовать» данные и методы, определенные в моем новом классе расширения. Насколько я понимаю, я не могу просто создать подкласс UIView, потому что все существующие элементы пользовательского интерфейса (потомки UIView) не получат дополнительное поведение? - person whatdoesitallmean; 04.06.2012
comment
Хорошо, я думал, вы создаете свои собственные подклассы. В этом случае ассоциативные ссылки определенно могут помочь. Хотя, если вы можете подробнее рассказать о типе функциональности, которую хотите добавить к UIViews, возможно, можно будет найти даже лучшее решение. - person Vladimir Gritsenko; 04.06.2012
comment
Как это не работает? Это фундаментальная особенность реализации Apple Objective C. - person Vladimir Gritsenko; 26.06.2013

Просто используйте для этого свойство UIView.tag. Его NSInteger (длинный), так что вы можете иметь карту где-нибудь еще.

person tuxSlayer    schedule 25.06.2013