ウィンドウ内のCGPointに基づいて、アクセシビリティエレメントがヒットした場合、それは何か(もしあれば)ヒットします。これは可能ですか?アクセシビリティ要素のヒットテストのソート...アクセシビリティ要素ヒットを返します(作成されたシステムを含む)。これを行う方法があるように見えます。ポイントのアクセシビリティエレメント
答えて
私は順番にあなたは、あなたが欲しいものを達成することを恐れます基本的にどのように再実装する必要がありますか?ブラウザはDOMで扱う彼らのイベントでキャプチャ段階の操作を行います。
- スタート最も一般的な要素で - どんなのUIKitベースのアプリケーションで、これは、アプリケーションの
keyWindow
か(アプリケーションがマルチスクリーンの場合)前になりますほとんどのあなたが問題のオブジェクトは、アクセシビリティ・コンテナであるかどうかwindowLevel
など - チェックを通じて把握する必要があります、画面のウィンドウ、および
- そうであれば、適切なものを求め、それに再帰します。
- アクセシビリティ要素でない場合は、アクセシビリティ要素であることを確認してください。ベールでない場合は
- です。
- ある場合は、アクセシビリティフレームに問題のポイントが含まれているかどうかを確認します。
- の場合はとなります。おめでとうございます。問題の要素を見つけることに成功したので、返却する必要があります。
- そうでない場合は、退会します。今では
、我々は、コンテナ内の例アクセシビリティ要素と要素を扱っています。
アクセシビリティ・コンテナは、アクセシビリティ・コンテナであり、アクセシビリティ・コンテナでもあります。アクセシビリティ・エレメントは、それ自体アクセシビリティ・エレメントです。
問題のポイントの要素を生成しないコンテナがあります。
アクセシビリティ要素の場合は、そのフレームにポイントが含まれているかどうかを確認し、 - もしそうなら、self
、 を返します。
私はいつもリターン・ゼロを意味しています。
ロジックをすべて取得してコードに変換し、NSObject
のカテゴリに入れます。
私の最善の答えは次のようになります。 すべてのアクセシビリティ要素を配列に追加します。 touchesEndedメソッドでは、配列を列挙し、いずれかの要素に触れているかどうかを確認します。これを行う1つの方法は、要素のboundingBoxにCGPointが含まれているかどうかを確認することです。 その後、そのタッチに対応するコードを書くことができます! これが役に立ったと思います!^_^
これを行うには2つの方法があります。 第1は、あなたがUIView
(新しいファイル、カテゴリー、名前、それは「タップ」、「のUIView」のサブクラス)のカテゴリを作成し、その中にこのコードを置く:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
NSLog(@"%@", self);
}
をこれまでのところ、このコードは動作しますすべてUIView
ですが、それ自身のすべてのサブクラスではありません。したがって、さらにいくつかのサブクラス(例えば、UIControl
、UIWindow
など)を作成する必要があります。これらのサブクラスでは、あなただけの呼び出し、NSLog()
何もする必要はありません。これらすべてのサブクラスがスーパークラスを呼び出すため
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
}
は、彼らが
NSLog()
UIView
のを呼び出すことになります。欠点は、すべてのケースで非常に多くのサブクラスを作成する必要があることです。たとえば、
UIControl
の場合は
UIView
、次に
UIButton
の場合は
UIControl
などが必要です。
。
他の方法では、はあなたの求めるものではありませんが、はるかに簡単です。サブビューを再帰的に呼び出すだけです。
- (void)logView:(UIView*)v index:(int)i
{
NSMutableString *str = [NSMutableString string];
for (int u = 0; u<i; u++) { [str appendString:@"| "]; }
[str appendFormat:@"<%@ %p frame:%@>", v.class, v, NSStringFromCGRect(v.frame)];
// of course you can change it to display your accessibility hint/label
printf("%s\n", [str UTF8String]);
for (UIView *vv in v.subviews) { [self logView:vv index:i+1]; }
}
あなたは一度、このメソッドを呼び出す:
[self logView:self.view index:0];
...、それは自動的に出力としてツリーを作成します。
<UITextField 0x6b30010 frame:{{20, 13}, {280, 31}}>
| <UITextFieldRoundedRectBackgroundView 0x6b31e00 frame:{{0, 0}, {280, 31}}>
| | <UIImageView 0x6b31fe0 frame:{{0, 0}, {0, 0}}>
| | <UIImageView 0x6b32070 frame:{{0, 0}, {0, 0}}>
| | <UIImageView 0x6b320e0 frame:{{0, 0}, {0, 0}}>
あなたは質問を見逃してしまったと思います:)ヒットビューを見つけようとしていませんが、ヒットしたUIAccessibilityElementを見つけようとしています...いつもビューではありません(ビューが存在しないときにUIAccessibilityElement領域を定義する方法があります、それはかなり頻繁に使用されます)。また、hitTestはヒットしたビューを返すメソッドです(非対話型の要素は返されませんが)。 – BadPirate
ああ、今、私はそれを得た。いくつかのことを試しましたが、成功を収めていませんでした:/実際に私はアクセシビリティを得られませんでした.-私は隠された場所でそれを有効にしなければなりませんか?私は、UI要素のラベルとヒントを設定して、コード 'NSLog(@"%@ "、[itm accessibilityHint])で尋ねました;' result: '(null)'? 'accessibilityElementCount'は不自然で、' self.accessibilityElementAtIndex: 'は常に'(null) 'です。アクセシビリティインスペクタが正しいことを示します。 'UIAccessibilityElement'のカテゴリは* phu * –
で動作しません。独自の要素を作成することができます。設定でアクセシビリティを有効にすると、要素を実際に見ることができます。ユーザーが関連するアクセシビリティ要素が何であるかを領域に触れたときに、それまでのところ情報を共有していないように見えます:( – BadPirate
現在、最新のAPIでこれを行う方法はないようです。
- 1. プリンタのポイントとiOSのポイント
- 2. ポイント
- 3. ポイント
- 4. ポイントからラインセグメントの距離にポイント
- 5. Bencodingのポイント
- 6. ActionScript3.0でポイント・ツー・ポイントで線を描く
- 7. ポイント、Y
- 8. ジャンゴ:ポイント
- 9. ポイント - ユースケース
- 10. AS3のvoidのポイント
- 11. 円のアルゴリズムのポイント?
- 12. dinicのアルゴリズムのポイント
- 13. CILのnopのポイント
- 14. Javaの特定のポイントから別のポイントへのループ?
- 15. XmlDeserialization:xmlconverterためのポイント
- 16. 3Dポイントの生成
- 17. サイトタイトルの共有ポイント
- 18. のPostgreSQL + GeoDjango:ポイントは
- 19. ValueConversionAttributeクラスのポイントは?
- 20. numpyの:ポイント合計
- 21. ポイントの対数プロット
- 22. JAASのポイントとは
- 23. ポイントの変更、UnboundNameException
- 24. 2D内の別のポイントでポイントを回転する
- 25. TChart - 一連の特定のポイントにポイントを追加する
- 26. は、私はクラスのポイントを持っている別のポイントに
- 27. スケーリンググリッドを使用した移動ポイント(リスト内のポイント)
- 28. 指し示された指し示されたポイントへのポイント
- 29. サークルサマリー(30ポイント)インタビューストーリーパズル
- 30. 異なるポイント間の2つの最も近いポイントにポイントを接続します
これは私が探していたようですが、テストする機会はありませんでした。 – BadPirate