2012-10-18 13 views
21

Podczas rozmowy z WWDC 2012 (Dobrych Praktyk do masteringu Auto Układ), prezenter powiedział, że można ustawić identyfikator UIView w Xcode do pomocy w debugowanie układ Auto:Jak ustawić identyfikator UIView w Xcode 4.5/iOS do debugowania automatycznego układu?

Identifier for UIView

wydaje się to naprawdę dobry pomysł, ale w Xcode 4.5.1 dla mojego projektu na iOS nie ma możliwości, aby ustawić tożsamość UIView.

Jak mogę ustawić Tożsamość UIView w Xcode 4.5.1? Jeśli nie jest to możliwe w projektach iOS, w jaki sposób mogę uzyskać tę samą funkcjonalność?

+1

zobaczyć tutaj http: // stackoverflow. com/questions/8295471/storyboard-nie zawiera kontrolera-z-identyfikatorem –

+0

@Oleg to działa tylko dla ViewController. OP pyta o instancje UIView, jak na zrzucie ekranu. – Fogmeister

Odpowiedz

-4

Zamiast Identifier, użyj pola Storyboard ID. To jest to samo.

+0

Brak widoku storyboard dla widoków, tylko dla kontrolerów widoku –

2

Niestety, nie wydaje się być sposób to zrobić. Próbowałem wypełnić prawie wszystko i nic nie działało. Ani restorationId, ani Accessibility features nie mają na to żadnego wpływu. Jeśli spojrzysz na zrzut ekranu zobaczysz, że faktycznie on ustawia NSView, który ma właściwość identyfikatora.

4

wyglądać Identifier jest dostępna tylko na NSView tylko w Mac OSX. Nie jest dostępny w UIView na iOS.

Znajdź złe ograniczenia lub ograniczenia.

Aby uzyskać ograniczenia wpływające na konkretny pogląd, użyj constraintsAffectingLayoutForOrientation :. Następnie można sprawdzić ograniczenia w debugerze. Są drukowane przy użyciu zapisu w formacie wizualnym. Jeśli twoje poglądy mają identyfikatory (patrz identyfikator (NSView)), to wydrukować z wykorzystaniem identyfikatora w opisie, jak poniżej:

Jak opisano tutaj: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/AutolayoutPG/Articles/debugging.html

1

Niekoniecznie odpowiedź, szukaliśmy, ale to, co jest pomocne robi coś takiego w debuggera:

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

to pomaga zidentyfikować pogląd. Upewnij się, że uruchomiłeś debuggera, aby zobaczyć, jak to działa.

0

Oto przydatny trik można zrobić, aby pomóc w autoLayout debugowania. Możesz dodać własną właściwość name do kategorii UIView za pośrednictwem kategorii i przeciążyć jej metodę description, aby dołączyć nową name. To nie do końca daje widoczną nazwę w autoLayout informacji debugowania, ale pozwala łatwo po widok z jego adresem i zobaczyć jego Imię.

Następnie wystarczy przypisać odpowiednie nazwy w kontrolerze widoku:

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

Teraz, gdy widzisz coś takiego:

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

można po prostu po adresy Widok:

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

Oto kod kategoria:

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 
13

Ustawianie accessibilityIdentifier na UIView załatwia sprawę. Testowany na Xcode 6.4, iOS 8.4.

1

Ustawienie w kodzie, pracował dla mnie:

kod:

imageView.accessibilityIdentifier = "profileImageView" 

wyjście:

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