2016-09-01 1 views
0

J'ai plusieurs UIWindows dans mon application. Certains UIWindows ont des niveaux de fenêtres très élevés. à savoirUIAccessibility ne sélectionne pas les éléments corrects

window.windowLevel = currentWindowLevel+1; 

Pour une raison quelconque lors de la mise sur le soutien de l'accessibilité, le système insiste sur la lecture des étiquettes d'accessibilité des vues situées dans la fenêtre de niveau inférieur, même dans les cas où les vues ne sont pas encore visibles.

Cet exemple minimal illustre ce comportement.

Avec la prise en charge de l'accessibilité activée, essayez d'appuyer sur l'étiquette dans la fenêtre rouge. Le système va lire le texte de la vue de la table sous la place

@interface ViewController() <UITableViewDataSource> 
@property (weak, nonatomic) IBOutlet UITableView *tableview; 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.tableview.dataSource = self; 
    [self.tableview registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"]; 

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     UIWindow *w = [[UIWindow alloc] initWithFrame:self.view.bounds]; 
     w.windowLevel = self.view.window.windowLevel + 1; 
     w.backgroundColor = [UIColor redColor]; 
     w.hidden = NO; 
     w.isAccessibilityElement = YES; 
     UILabel *l = [[UILabel alloc] init]; 
     l.text = @"KUKUKUKUKUKUKUKLU"; 
     [l sizeToFit]; 
     l.frame = CGRectOffset(l.frame, 40, 100); 
     [w addSubview:l]; 
     w.accessibilityLabel = @"Read this outloud instead"; 
     static id window; 
     window = w; 
    }); 

    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return 100; 
} 

// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier: 
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls) 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 
    cell.textLabel.text = @"Test"; 
    return cell; 
} 

@end 
+0

Thats rien à voir avec la question. J'ai fourni une réponse dans tous les cas –

Répondre

1

La solution est de définir l'attribut

Window.accessibilityViewIsModal = YES;