2014-06-30 4 views
8

캘린더에서 새로운 이벤트를 만들 때 VoiceOver가 활성화 된 종일 셀을 탭하면 Siri는 "하루 종일 스위치 버튼을 켜고 끄고 두 번 탭하여 설정을 변경하십시오"라고 말합니다. 실제로 스위치를 두 번 탭하면 스위치가 전환됩니다. 또한 토글 스위치 자체 만 탭할 수도 없습니다. 셀 자체와 상호 작용하여 스위치를 전환해야하며 스위치 자체는 액세스 할 수있는 요소가 아닙니다.VoiceOver 상호 작용을 위해 UISwitch와 UITableViewCell을 결합하십시오.

내 앱에는 레이블과 스위치가 완전히 동일한 설정이 있습니다. 그러나 VoiceOver를 활성화하여 셀을 탭하면 레이블 만 읽으므로 시각 장애인은 셀에 토글 스위치가 있는지 잘 모릅니다. 스위치 자체를 탭하면 상호 작용할 수 있으므로 캘린더 앱의 설정과 반대입니다.

Apple에서 구현 한 것과 동일한 동작을 어떻게 얻을 수 있습니까? VoiceOver가 셀을 강조 표시 할 때 양쪽 모두를 읽을 수 있도록 스위치를 결합하는 방법이 필요합니다. 그러면 스위치를 두 번 탭하면 스위치를 전환해야하며 설정을 수행하는 방법을 모르겠습니다. 감사!

답변

7

원하는 동작을 구현하려면 UISwitch을 셀의 contentView에 배치하는 대신 프로그래밍 방식으로 accessoryView으로 추가하십시오. 그러면 VoiceOver를 사용할 때 셀과 스위치는 정확히 Calendar에서와 똑같이 예상대로 작동합니다.

+1

당신이 대답 해주었습니다. 불행히도 그것은'UISegmentedControl'이 아닌'UISwitch'에서만 작동합니다. –

+0

@borisy UITableViewCell을 서브 클래스 화하고 accessibilityActivate()를 구현하여 UISegmentedControl과 동일한 효과를 얻을 수 있습니다. UISwitch보다 더 많은 작업이 필요하지만 수행 할 수 있습니다. – Daniel

1

당신은 당신은 VoiceOver를이 답변에 따라 실행되는 경우에 대한 사용자 정의 제스처 설정할 수 있습니다

cell.accessibilityLabel = @"Double tap to toggle setting"; 

를 사용하여 셀에 사용자 지정 접근성 설명을 설정 할 수 있어야한다 :

https://stackoverflow.com/a/12337128/567511

을 그러나 여기에서는 맞춤 동작이 필요하지 않으며 didSelectRowAtIndexPathUIAccessibilityIsVoiceOverRunning이 true 일 때만 스위치를 넘깁니다.

+1

두 번 두드리기가 실제로 설정을 전환하지 않으므로 그렇게하는 것은 좋지 않습니다. 또한 사용자가 스위치를 두드리면 설정을 변경하기 위해 두 번 탭할 수 있다고 언급 한 텍스트가 이미 포함되어 있습니다. 스위치를 셀과 결합하여 셀을 트리거하면 행을 선택하는 대신 스위치를 토글하는 방법이 필요합니다. – Joey

+0

죄송합니다. 아직 그 부분이 작동하지 않았다는 사실을 오해하고 있습니다. 내 편집을 참조하십시오. – nagem

+0

고마워요. 나는 그것을 할 수 있었지만 셀을 강조 표시하면 사용자에게 스위치와 상태 (켜기 또는 끄기)에 대해 알려야합니다. 이것은 동적이어야하므로 accessibilityLabel에 대한 정적 NSString을 정의 할 수 없습니다. 셀을 "결합하여 하나에 전환"하는 방법이 없으므로 캘린더에서와 똑같이 다른 하나를 읽습니다. 어떻게 구현했는지 궁금합니다.accessoryView로 UISwitch를 추가하는 것이 해결책일까요? 나는 그것을 안으로 드래그하여 사용자 정의 셀에 배치했습니다. – Joey

1

the answer of Joey에 대해 자세히 설명하고 코드에서이 질문에 대한 해결책을 얻는 방법을 설명합니다.

tableView : cellForRowAtIndexPath :에서 사용자 지정 UISwitch보기를 만들고이를 셀의 accessoryView에 추가하십시오. 이것은 다음과 같을 수 있습니다.

UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero]; 
[switchView setOn:NO]; 
[switchView addTarget:self action:@selector(selector:) forControlEvents:UIControlEventValueChanged]; 
cell.accessoryView = switchView; 

return cell; 

셀은 이제 예를 들어. 설정 또는 캘린더. VoiceOver가 활성화 된 상태에서 셀을 두 번 탭하면 UISwitch를 켜거나 끕니다. VoiceOver는 사용자에게 액세스 가능성 힌트와 함께 스위치의 상태를 자동으로 알립니다.