Как установить идентификатор UIView в Xcode 4.5 / iOS для отладки автоматического макета?

Во время беседы с WWDC 2012 («Лучшие практики для мастеринга авто макета») ведущий сказал, что вы можете установить идентификатор UIView в Xcode, чтобы помочь в отладке автомакета:

Идентификатор для UIView

Это кажется действительно хорошей идеей, но в Xcode 4.5.1 для моего проекта iOS я не вижу возможности установить идентификатор UIView.

Как установить идентификатор UIView в Xcode 4.5.1? Если это невозможно в проектах iOS, как я могу получить такую ​​же функциональность?

Настройка accessibilityIdentifier на UIView делает трюк. Протестировано на Xcode 6.4, iOS 8.4.

Кажется, что идентификатор доступен только в NSView только в Mac OSX. Он недоступен в UIView в iOS.

Найдите плохие ограничения или ограничения.

Чтобы получить ограничения, влияющие на конкретное представление, используйте ограничения. ЭффектLayoutForOrientation :. Затем вы можете проверить ограничения в отладчике. Они печатаются с использованием нотации визуального формата. Если ваши представления имеют идентификаторы (см. Идентификатор (NSView)) , они распечатываются с использованием идентификатора в описании, например:

Как описано здесь: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/AutolayoutPG/Articles/debugging.html

К сожалению, похоже, что это не так. Я пробовал заполнять почти все, и ничего не получилось. Ни восстановление, ни признаки доступности не влияют на это. Если вы посмотрите на скриншот, вы увидите, что на самом деле он устанавливает NSView, который имеет свойство идентификатора.

Не совсем тот ответ, который вы искали, но в этом отладчике полезно сделать что-то подобное:

 expr [(UIButton*)0x12345 setBackgroundColor:[UIColor purpleColor]] 

Это помогает идентифицировать представление. Убедитесь, что вы нажмете пробег на отладчике, чтобы увидеть, как он вступает в силу.

Вот вам полезный трюк, который вы можете сделать, чтобы помочь в отладке AutoLayout. Вы можете добавить свое собственное свойство name в UIView через категорию и перегрузить его метод description чтобы добавить ваше новое name . Это не дает вам видимого имени в информации об отладке AutoLayout, но позволяет вам легко отображать представление по его адресу и видеть его имя.

Затем просто назначьте соответствующие имена в своем контроллере вида:

 - (void)viewDidLoad { [super viewDidLoad]; self.firstView.name = @"MyViewController.firstView"; self.secondView.name = @"MyViewController.secondView"; } 

Теперь, когда вы видите что-то вроде этого:

 <NSAutoresizingMaskLayoutConstraint:0x175086220 h=-&- v=-&- UIView:0x147533250.height == UIView:0x14760b4a0.height> 

Вы можете просто po адреса вида:

 po 0x147533250 MyViewController.firstView <UIView: 0x147533250> po 0x14760b4a0 MyViewController.secondView <UIView: 0x14760b4a0> 

Вот код категории:

UIView + Name.h

 #import <UIKit/UIKit.h> @interface UIView (Name) @property (strong, nonatomic) NSString *name; - (NSString *)description; @end 

UIView + Name.m

 #import "UIView+Name.h" #import <objc/runtime.h> @implementation UIView (Name) - (NSString *)name { return objc_getAssociatedObject(self, @selector(name)); } - (void)setName:(NSString *)name { objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (NSString *)description { return [NSString stringWithFormat:@"%@ %@", self.name, [super description]]; } @end 

Установка в коде, работала для меня:

код :

 imageView.accessibilityIdentifier = "profileImageView" 

выход :

 <NSLayoutConstraint:0x17028eec0 profileImageView.width == 40 (active, names: profileImageView:0x10fd48110 )> 

Вместо Identifier используйте поле идентификатора Storyboard . Это то же самое.

  • Интернационализация в xcode4.5 с базовой интернационализацией
  • XCode 4.5 предупреждает о конфликтах имен методов между категориями для родительских / дочерних классов
  • xcode copy files build phase - что конкретно обозначают пункты назначения?
  • Как добавить UIImageView с UILabel в панели навигации iphone?
  • xCode 4.5 git merge не удается выполнить или дать ошибки
  • Вернуть Xcode 4.5 новые XIB-файлы в iOS <6
  • Ошибка загрузки TestFlight: неверный IPA / dSYM не найден
  • MonoDevelop / XCode Build успешно. Сбой сборки. Неверные данные
  • Цель развертывания XCode iOS 6 = совместимость с?
  • Локализация XCode 4.5 + языковой формат, загруженный в основной интерфейс UIWebView / IOS
  • нажатие UIViewController без навигационного контроллера
  • Interesting Posts

    Где находится .gdbinit, и как я могу его отредактировать?

    Как надежно блокировать дублирование вызовов анимации в Objective-C?

    XCode 7: раскадровки WatchOS не поддерживают тип целевого устройства «iphone»

    Как удалить данные cookie и userdefaults с помощью sharedHTTPCookieStorage?

    Многострочный UILabel и UITextView с использованием раскадровки, автоматической компоновки и быстрой

    ios7 настройка громкости iPodMusicPlayer

    Xcode 4.2 "идентификатор повторного использования ячеек в nib (Cell) не соответствует идентификатору, используемому для регистрации nib (ThisCell)"

    как я могу установить значок в панели вкладок в объективе-c?

    Сделать класс итерабельным с помощью for for for Loop?

    Тонкая белая рамка на iPhone

    Размер изображения Howto CALayer независимо от границ CALayer

    как центрировать выбор uitableview с использованием значения indexpath

    Права не соответствуют профилю Provisioning Profile (0xE8008016)

    iOS7 не может получить доступ к локальному хранилищу HTML5, если файлы cookie отключены

    Общая функция без входного параметра в Swift?

    Давайте будем гением компьютера.