Определенные пользователем атрибуты времени выполнения (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() } } } 

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

  • Вызовите NavigationController (xib) из ViewController (раскадровки)
  • Xcode Storyboard textview ошибка, получившая срез в середине
  • Как использовать логотип изображения на панели навигации вместо заголовка
  • Раскадровка: как связать один вид с несколькими видами контейнеров?
  • Каковы преимущества использования раскадровки вместо xib-файлов в iOS-программировании?
  • Как раскадровка сочетает UITabBarController и скользящее меню, такое как MMDrawerController?
  • Два вида, один под другим в портретном и бок о бок в ландшафте с использованием ограничений макета
  • «NSInvalidUnarchiveOperationException», причина: «Не удалось создать экземпляр класса с именем MKMapView»
  • Xcode 4 UIButton segue push to Table View Controller
  • Измените подробный вид из приложения MasterDetail iPad с помощью раскадровки
  • Ошибка раскадровки - iOS 5.1 - Xcode 4.3.3
  • Interesting Posts

    Есть ли способ, чтобы текст в ярлыке автоматически обновлял дисплей

    Почему изменение имени приложения не отражается в центре уведомлений iOS 7?

    как настроить массив для нескольких аннотаций с быстрым

    Панель поиска UISearchController перекрывает первую ячейку, когда активна

    UIWebView Inside Размер содержимого UIScrollView

    Цель-C: Слабая attritube не работает, как ожидалось

    Кордова iOS: xcrun не может найти «PackageApplication» после обновления xcode

    ARC __bridge cast Block_copy & Block_release

    запуск приложения с пользовательской клавиатуры iOS8

    Декодирование видео с помощью CoreMedia.framework на iOS

    Как создать эффект Parallax

    Как создать UIView для портретного и ландшафтного макета

    Модуль из подпроекта (рамки) не найден

    Получите уникальную базу объектов по атрибуту из NSMutableArray, которые содержат объект класса User

    Можно ли вызвать обработчик завершения блока из другой функции в iOS?

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