When VoiceOver is enabled, voice-over for the UIPickerView always says “#Item 1 of #TotalNumberOfItems” no matter to which row we swipe. Programatically all the elements are getting updated with the correct selected index but the VoiceOver always says “#Item 1 of #TotalNumberOfItems”
Let me know if anyone came across this issue in PickerView?
Some Observations:
- If we leave the app for some time and then swipe, the index is voiced out correctly for once and then the same issue persists
- If we tap on the picker row after swiping, the index is voiced out correctly
- didSelect is called 2 times every time we swipe the row.
- DatePicker is working fine
- Default Reminder app has some PickerViews, voice-over works as expected. (Though found that index details are not proper when we scroll up and down)
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.normalPicker.backgroundColor = [UIColor blackColor];
self.categories = [[NSMutableArray alloc] initWithObjects:@"Apple", @"Bat", @"Cat", @"Dog", @"Elephant", @"Fish", @"Goat",@"Hen", nil];
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return self.categories.count;
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSLog(@"DidSelect: Row = %@", self.categories[row]);
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UILabel *label = nil;
if (view == nil) {
label = [UILabel new];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor redColor];
} else {
label = (UILabel *) view;
}
NSString *text = self.categories[row];
label.text = text;
return label;
}
@end