Я работаю над созданием подкласса UIView (который я называю MarqueeLabel
), который анимирует вложенный вид UILabel ivar в виде выделения, когда текст UILabel слишком длинный для содержащего представления.
Я надеялся получить чистую реализацию, без необходимости писать методы в моем MarqueeLabel
классе просто для установки / извлечения всех стандартных переменных экземпляра UILabel (текст, шрифт, цвет и т. Д.) UILabelИвар.Я нашел способ сделать это с помощью пересылки сообщений - все нераспознанные методы, отправленные на MarqueeLabel
, передаются в UILabel ivar.В моем случае методы, не распознаваемые MarqueeLabel
, являются методами, обычно используемыми с UILabel.
Однако при таком подходе есть некоторые проблемы:
1. Вы должны использовать [marqueeLabel setText:@"Label here"]
, а не marqueeLabel.text
2. Компилятор выдает предупреждения в приведенной выше строке, поскольку:
'MarqueeLabel' может не отвечать на '-setText:'
, который я мог бы игнорировать, но раздражал бы кого-либо еще.
Чтобы избежать этих проблем, есть ли способ «выдвинуть» методы ивара, чтобы онидоступный для чего-либо, использующего класс, и в то же время воздействующий на объект ivar?
Спасибо!
Примечание: Способ, который я настроил, может быть не лучшимсделать это тоже.Возможно, подкласс или продолжение класса UILabel было бы лучше, но я не смог понять, как анимация + обрезка (когда прокручиваемый текст выходит за пределы, содержащий UIView и исчезает), могут быть выполнены с помощью этих методов.
Примечание 2: Я знаю, что вы можете использовать marqueeLabel.subLabel.text
, где subLabel
- подпредставление UILabel.И это может быть направление, которое я выберу, но с тем же успехом могу посмотреть, есть ли лучшее решение!