Простой подкласс UIButton (необходимо иметь свойство NSString как тег) - PullRequest
0 голосов
/ 30 марта 2011

У меня есть представление, в котором есть куча программно созданных объектов UIButton (типа прямоугольника со скругленными углами), но мне нужно хранить в них немного информации, идентифицирующей каждую кнопку.С тэгом у меня все было в порядке, но цифры стали слишком большими, и мне бы хотелось, чтобы с каждой кнопкой была связана другая часть информации, на этот раз с NSString.Кстати, лейбл взят, я не могу это использовать.Какой самый простой / быстрый способ сделать это?Нужно ли создавать подкласс UIButton и добавлять к нему собственное свойство, например stringTag?Я еще не очень опытен в obj-c, и где-то читал, что это боль.Есть ли более простой способ сохранить дополнительную строку в моих UIButtons?Заранее большое спасибо за любые советы.

Ответы [ 2 ]

1 голос
/ 30 марта 2011

Подкласс Uibutton - это настоящая боль. Обычно они работают не так, как ожидалось, поскольку UIButton - абстрактный класс. Поэтому, чтобы сделать полностью работающую кнопку, вам, возможно, придется переопределить несколько методов, чтобы заставить кнопку делать все, что делают подклассы Apple. Вместо этого, если вам просто нужно добавить хранилище, вы можете использовать ассоциативные ссылки . Вы должны #import <objc/runtime.h> использовать функции.

Лучший способ сделать это - определить строковую константу NSString *const buttonTagName = @"com.youapp.buttonTag"; и сохранить теги с этим ключом objc_setAssociatedObject(button, buttonTagName, tagForCurrentButton, OBJC_ASSOCIATION_RETAIN);.

0 голосов
/ 30 марта 2011

Я думаю, что добавление NSString с некоторой идентификационной информацией не должно сильно испортить ваш подкласс UIButton. По крайней мере, это легко попробовать, мы говорим здесь 10 строк кода. Я подкласс UIButton и переопределил метод initWithFrame один раз и получил его работать правильно. Но это правда, это боль, и не спрашивайте меня, почему я это сделал :)

...