13

(Objective Cコードのa)JavaScriptオブジェクトvalue()にアクセスしようとしています。を使用して値を適切に設定でき、シミュレーターがテキストを更新することを確認できますが、値を取得しようとすると、取得するだけです。UIAStaticTextUILabelsetValue()null

すなわち

text.setValue("new text");

シミュレータでラベルを「新しいテキスト」に更新します。

text.value()

null値を設定した後も戻ります。

私はここで何が間違っているのですか?

4

4 に答える 4

15

問題の根本は、本来あるべきテキストではなく、returnaccessibilityValueのプロパティにあるようです。この問題を解決するために、カスタムカテゴリのプロパティをオーバーライドします。UILabelaccessibilityLabelUILabelaccessibilityValueUILabel

@interface UILabel (MyAccessibility)
@property(nonatomic, copy) NSString *accessibilityValue;
@end


@implementation UILabel (MyAccessibility)

@dynamic accessibilityValue;

-(NSString *)accessibilityValue {
    // Here we force UIKit to return Label value, not the accessibility label 
    return self.text;
}

@end

この小さなトリックに加えて、自動テスト用の UI 要素を準備するために、アクセシビリティ ラベルよりもアクセシビリティ識別子を優先するように常に心がけています。Instruments New Features User Guideの「Accessibility Label and Identifier Attributes」セクションを確認してください。

于 2012-03-22T20:48:08.517 に答える
12

何時間検索して試してみた結果、 O'Reilly Answersでこれを見つけ、Apple の UIAutomation フレームワークを使用して静的テキスト ラベルの値を取得できないというバグがあることを確認しました。引用は次のとおりです。

UILabel のテキスト ラベル文字列は、常に nil である値ではなく、StaticText フィールドの名前として表示されます。アクセシビリティ ラベルを設定すると、それが name プロパティになり、UILabel で現在のテキストを検出する方法がなくなります。これについては、Apple でバグ レポートを開いています。

于 2011-10-16T20:10:25.633 に答える
1

ChrisHへの返信(彼への返信方法がわからないため):UILabelと同じトリックをUITableViewCellに適用し、セル内のラベルのテキストについて、静的ではなくvalue()のセルと通信できますその中のテキスト。実際には、ハックの上にさらにハックを積み上げているような気がします。しかし、私は他の方法を見ません。

編集: 完全を期すために、既存のソリューションを含む完全な実装を追加しました。

@interface UILabel (MyAccessibility)
@property(nonatomic, copy) NSString *accessibilityValue;
@end


@implementation UILabel (MyAccessibility)

@dynamic accessibilityValue;

-(NSString *)accessibilityValue {
    // Here we force UIKit to return Label value, not the accessibility label 
    return self.text;
}

@end


@interface UITableViewCell (AccessibilityFix)
@property(nonatomic, copy) NSString *accessibilityValue;
@end


@implementation UITableViewCell (AccessibilityFix)

@dynamic accessibilityValue;

-(NSString *)accessibilityValue {
    // Here we force UIKit to return Label value, not the accessibility label
    return self.textLabel.text;
}

@end
于 2013-10-31T19:01:51.627 に答える