2017-09-22 3 views
0

UIButton 하위 클래스 인 ACTLanguageButton을 사용하여 스타일을 재사용 할 수 있도록 몇 가지 맞춤 UI 변경을 수행합니다. 서브 클래스에서 나는 다음과 같은 코드는 접근성에 관한 한 : iOS VoiceOver 버튼이 목표 대상을 호출하지 않습니다.

- (BOOL)isAccessibilityElement { 
    return YES; 
} 

- (NSString *)accessibilityLabel { 
    NSLocale *locale = [NSLocale localeWithLocaleIdentifier:self.language]; 
    NSString *displayLanguage = [locale displayNameForKey:NSLocaleIdentifier value:self.language]; 
    return [NSString stringWithFormat:@"Language Preference: %@", displayLanguage]; 
} 

- (NSString *)accessibilityHint { 
    return @"Opens the list of available languages for accessible services."; 
} 

- (UIAccessibilityTraits)accessibilityTraits { 
    return UIAccessibilityTraitButton; 
} 

그리고

인스턴스화하고 ACTLanguage 버튼의 수퍼 인 UIView의에서 "onLanguages"자체

self.languageButton = [[ACTLanguageButton alloc]initWithFrame:CGRectMake(self.frame.size.width - 120, 20, 120, 25)]; 
[self addSubview:self.languageButton]; 
[self.languageButton addTarget:self action:@selector(onLanguages) forControlEvents:UIControlEventTouchUpInside]; 

그리고 방법

- (void)onLanguages { 
    [self.languagePopupView showWithCallback:nil]; 
} 

버튼 동작이 VoiceOver를 (일반 탭 사용)을 활성화 완벽없이 작동 : 단지 모달 UIView의를 통해 나타나는 팝업보기를 보여줍니다한다. 또한 OS X에서 접근성 검사기를 시뮬레이터와 함께 사용하면 작업이 잘 수행됩니다.

실제 장치 (9.3을 실행하는 iPhone 5에서 테스트)에서는 "onLanguages"메서드가 호출되지 않습니다. 액세스 가능성 레이블, 힌트 및 특성을 올바르게 읽었으므로 요소를 잘 집중시킬 수 있지만 두 번 살짝 두 번 누르면 "onLanguages"메서드가 예상대로 트리거되지 않습니다.

아이디어가 있으십니까?

답변

1

이 작업을 수행하는 간단한 방법은 acccessibilityActivate()을 구현하고 거기에서 onLanguages()을 호출하는 것입니다.

+0

이것은 훌륭했습니다. 나는 [self sendActionsForControlEvents : UIControlEventTouchUpInside]를 호출하기 위해 그것을 무시했다. 바로 작동했습니다. 정말 고마워! – AlexKoren

관련 문제