2016-08-09 21 views
1

私はシンプルなUIView階層を持っています。ビューBとCを含む親ビューAがあります。すべてのビューをアクセシビリティ要素として設定すると、ビューAだけにア​​クセスできます。ビューBとCはクリックできません。アクセシビリティ要素であるためには、すべてのビュー(A、B、C)が必要です。アクセシビリティ要素としてのVoiceOver親ビューと子ビュー

すべてのビュー(A、B、C)を同じレベルにすることで実現できますが、私のアプリのビュー階層は変更を許可していません。

解決策はありますか?

+0

はあなたに見ている:ここで同じビュー(X)で見るX.

- (NSArray *)voiceOverElements { if (!_voiceOverElements) { UIAccessibilityElement *element = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; CGRect frame = UIAccessibilityConvertFrameToScreenCoordinates(A.frame, self); element.accessibilityFrame = frame; _voiceOverElements = @[element]; for (UIView *view in A.subviews) { UIAccessibilityElement * element = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; CGRect frame = UIAccessibilityConvertFrameToScreenCoordinates(view.frame, A); element.accessibilityFrame = frame; _voiceOverElements = [_voiceOverElements arrayByAddingObject:element]; } } return _voiceOverElements; } 

で作成されたUIAccessibilityElementsのアレイが作成のコード例にある次のように、UIAccessibilityContainerプロトコルが実装されましたUIAccessibilityContainerプロトコル? – ChrisCM

答えて

2

ビューAはアクセシビリティ要素ですか?サブビューにアクセスできるようにするには、包含ビューはアクセシビリティ要素であるでなく、でなければなりません。あなたがアクセスできるようにする3番目のビュー、Aを、必要な場合は

view.isAccessibilityElement = false 

は、それBCの兄弟ビューにします。

+0

私はBとCの兄弟を作ることができませんでした。これは既に私のアプリのビュー階層だったので、AとUIAccessibilityContainerプロトコルの親ビューを使って問題を解決しました。答えの下で見つけることができるソリューションの詳細。 – pawel221

0

最後に、UIAccessibilityContainerプロトコルを使用して、既存のビュー階層A(親)、B(子)、C(子)を使用して解決しました。私は別のビューを使用しました。つまり、Aの親であるXとその中にUIAccessibilityContainerプロトコルを実装しました。

- (BOOL)isAccessibilityElement { 
    return NO; 
} 

- (id)accessibilityElementAtIndex:(NSInteger)index { 
    return [self.voiceOverElements objectAtIndex:index]; 
} 

- (NSInteger)accessibilityElementCount { 
    return self.voiceOverElements.count; 
} 

- (NSInteger)indexOfAccessibilityElement:(id)element { 
    return [self.voiceOverElements indexOfObject:element]; 
} 
関連する問題