web-dev-qa-db-ja.com

自動レイアウトをデバッグするためにXcode / iOSでUIViewの識別子を設定するにはどうすればよいですか?

WWDC 2012(自動レイアウトをマスターするためのベストプラクティス)からの講演の中で、プレゼンターは、自動レイアウトのデバッグを支援するためにXcodeでUIView識別子を設定できると述べました。

Identifier for UIView

これは本当に良い考えのように思えますが、私のiOSプロジェクトのXcode 4.5.1では、UIViewのIDを設定するために私が見ることができる方法はありません。

Xcode 4.5.1でUIViewのIDを設定するにはどうすればよいですか? iOSプロジェクトでこれが不可能な場合、どうすれば同じ機能を利用できますか?

25
Rich Apodaca

accessibilityIdentifierUIViewに設定するとうまくいきます。 Xcode 6.4、iOS8.4でテスト済み。

17
kean

Identifierは、Mac OSXのNSViewでのみ使用できるようです。 iOSのUIViewでは使用できません。

悪い制約を見つけます。

特定のビューに影響を与える制約を取得するには、constraintsAffectingLayoutForOrientation:を使用します。その後、デバッガーで制約を検査できます。それらは、視覚的なフォーマット表記を使用して印刷されます。ビューに識別子(識別子(NSView)を参照)がある場合、次のように説明の識別子を使用して出力されます。

ここで説明されているように: http://developer.Apple.com/library/ios/#documentation/UserExperience/Conceptual/AutolayoutPG/Articles/debugging.html

5
TuanCM

残念ながら、これを行う方法はないようです。私はほとんどすべてを埋めようとしましたが、何も機能しませんでした。 restoreIdもアクセシビリティ特性もこれに影響を与えません。スクリーンショットを見ると、実際に彼がNSViewを設定していることがわかります。NSViewにはidentifierプロパティがあります。

2

コードの設定、私のために働いた:

コード

imageView.accessibilityIdentifier = "profileImageView"

出力

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

あなたが探していた答えは完全ではありませんが、役立つのはデバッガーでこのようなことをすることです:

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

これは、ビューの識別に役立ちます。ただし、デバッガーで実行を押して、有効になることを確認してください。

0
Mustafa

AutoLayoutのデバッグを支援するために実行できる便利なトリックを次に示します。独自のnameプロパティをカテゴリを介してUIViewに追加し、そのdescriptionメソッドをオーバーロードして新しいnameを含めることができます。これにより、AutoLayoutデバッグ情報に表示される名前が完全に表示されるわけではありませんが、アドレスからビューを簡単にpoして、指定された名前を確認できます。

次に、ViewControllerで適切な名前を割り当てます。

- (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>

カテゴリコードは次のとおりです。

IView + Name.h

#import <UIKit/UIKit.h>

@interface UIView (Name)

@property (strong, nonatomic) NSString *name;

- (NSString *)description;

@end

IView + 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
0
devios1