Определенные пользователем атрибуты времени выполнения (IBInspectable), установленные после заданных атрибутов?

Я хочу добавить новый атрибут IBInspectable (вычисляемое свойство) в UILabel через метод категории. В идеале я хочу, чтобы этот атрибут устанавливался после того, как текст меток задан (через setValue: forKey), так как этот атрибут IBInspectable может привести к обновлению текста UILabels, и мы не хотим, чтобы текст в UILabel позже заменил его. Глядя на документацию, не упоминается, что предварительно заданные атрибуты всегда задаются перед пользовательскими атрибутами во время загрузки nib/storyboard для атрибутов, настроенных в Interface Builder.

Являются ли пользовательские атрибуты добавлены к объекту в Interface Builder с использованием IBInspectable среды IBInspectable или User defined, которые гарантированно устанавливаются после стандартных свойств / атрибутов заданных объектов?

2 Solutions collect form web for “Определенные пользователем атрибуты времени выполнения (IBInspectable), установленные после заданных атрибутов?”

В следующем эксперименте делается вывод о том, что свойство собственного текста установлено до свойства категории, поэтому значение можно безопасно перезаписать установщиком категории.

Категория ярлыков:

 // UILabel+Thingy.h #import <UIKit/UIKit.h> @interface UILabel (Thingy) @property (nonatomic, strong) IBInspectable NSString *thingy; @end // UILabel+UILabel_Thingy.m #import "UILabel+Thingy.h" #import <objc/runtime.h> @implementation UILabel (Thingy) - (NSString *)thingy { return objc_getAssociatedObject(self, @selector(thingy)); } - (void)setThingy:(NSString *)thingy { NSLog(@"setting thingy to '%@', my text is currently '%@'", thingy, self.text); objc_setAssociatedObject(self, @selector(thingy), thingy, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } @end 

В IB установите свойство проверяемой категории и свойство текста ….

введите описание изображения здесь

Небольшая аппаратура в контроллере с открытым представлением:

 - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"didLoad text is '%@' and thingy is '%@'", self.label.text, self.label.thingy); } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; NSLog(@"willAppear text is '%@' and thingy is '%@'", self.label.text, self.label.thingy); } 

Запустите его, а выход NSLog указывает, что в течение пробуждения от nib собственное свойство устанавливается к тому времени, когда вызывается свойство setter.

… [794: 41622] установка thingy на «thingy value», мой текст в настоящее время «текстовое значение»,

… [794: 41622] didload text – это «текстовое значение», а thingy – «важная ценность»,

… [794: 41622] willappear text – это «текстовое значение», а вещь – «важная ценность»,

Установка свойства текста метки в настройке свойств категории будет (и, я проверял его), приведет к тому, что свойство text будет перезаписано в свойство thingy, так как сначала свойство text инициализируется.

Дальнейшие доказательства можно увидеть в файле XIB при визуализации в виде XML …

 <label opaque="NO" (... all the native properties) text="text value" (...) id="XAM-6h-4fn"> <rect key="frame" x="274" y="147" width="278" height="34"/> (... and so on) <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="string" keyPath="thingy" value="thingy value"/> </userDefinedRuntimeAttributes> </label> 

… который согласуется с тем, что представление создается и инициализируется посредством обхода предварительного порядка , тем самым устанавливая свойства метки (родительского тега) перед (дочерним тегом) userDefinedRuntimeAttributes.

Если вы создаете расширение с компьютерной переменной IBInspectable, значение, помещенное в это настраиваемое поле в Interface Builder, переопределит значение в текстовом поле метки, когда оба значения заданы в Interface Builder, хотя он не будет предварительно просматривать этот путь в Interface Builder ,

 extension UILabel { @IBInspectable var value: String? { get { return text } set { text = newValue setNeedsDisplay() } } } 

Конструктор интерфейсов введите описание изображения здесь

  • Как мне получить доступ к моему диспетчеру view из моего приложения appDelegate? IOS
  • Метка UIButton сбрасывается при нажатии на нее TableViewCell
  • Получить XIB в iOS 7 SDK
  • Контейнер UIStoryboard присоединяет IBOutlet к Parent ViewController
  • UIView вне контроллера просмотра в раскадровке
  • Каков правильный способ продолжить этот bool?
  • Что такое «Ограничение маржи» в раскадровке в Xcode 6
  • Внедрение существующего UINavigationController в новые контроллеры представлений
  • Отобразить clearColor UIViewController над UIViewController
  • Xcode 8 beta 6 unind segue кажется сломанным, потому что «WithSegue» добавляется к имени метода @IBAction для разматывания автоматически
  • Яркость, не работающая с UIVisualEffectView от раскадровки
  • Interesting Posts

    Команда «InstallProfile» через MDM

    Можете ли вы создать UIBarButtonItem с пользовательским представлением в интерфейсе Builder

    Swift – Как создать запрос сортировки по убыванию на Firebase?

    Сбой при использовании приложения cocos2d 2.1 в iOS7 во время просмотра экранов Game Center (таблица лидеров, достижение)

    Вставка новой ячейки в UICollectionView

    Разрешено ли скрывать iAds, даже когда они доступны?

    Как я могу запросить увеличение размера локального хранилища HTML5 на iPad, как это делает веб-приложение FT?

    Приложение iPhone отключилось при загрузке до завершения AppDelegate Загрузка

    Как конвертировать CGRect из портрета в альбом?

    Как добавить элемент панели вкладок в UITabBarController без контроллера вида?

    Как получить доступ к изображениям в UIATablecell

    Как показать размытое изображение перед загрузкой (например, в whatsapp) в ios?

    AudioQueue, как узнать длину воспроизведения данных в очереди

    watchOS2 как установить значок настроек компаньона

    Почему делегаты UIKit «назначают» вместо «слабых»?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.