如何禁用工具栏按钮项目的可访问性

问题描述 投票:0回答:1

我有一个工具栏,我想在打开辅助功能时跳过标题按钮。

我可以使用 accessibilityElementsHidden 跳过整个 工具栏accessibility

但我只是想跳过标题按钮的可访问性。

我尝试单独禁用标题按钮的可访问性。

但它不起作用。

所以我设置了 AccessibilityElements 属性,它跳过标题栏并读出右侧的 DONE 按钮。但没有个人关注那个DONE按钮。

更新:

我在这里添加了观察者

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

这里是观察者

 [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(beginEditingHandler:) name:UITextFieldTextDidBeginEditingNotification object:nil];

这是我管理辅助功能项目的方式

  - (void)beginEditingHandler:(NSNotification *)notification {
    UIResponder *responder = notification.object;
    IQToolbar *inputAccessoryView = responder.inputAccessoryView;
    if (inputAccessoryView) {
        if ([inputAccessoryView isKindOfClass:[IQToolbar class]]){
            NSMutableArray *arrAccessibilityItems = [[NSMutableArray alloc]init];
            if(inputAccessoryView.previousBarButton){
                if(!inputAccessoryView.previousBarButton)
                [arrAccessibilityItems addObject:inputAccessoryView.previousBarButton];
            }
            if(inputAccessoryView.nextBarButton){
                if(!inputAccessoryView.nextBarButton.isHidden)
                [arrAccessibilityItems addObject:inputAccessoryView.nextBarButton];
            }
            if(inputAccessoryView.titleBarButton){
                IQTitleBarButtonItem *titleBtn= inputAccessoryView.titleBarButton;
                if(titleBtn.title.length>0){
                    [arrAccessibilityItems addObject:inputAccessoryView.titleBarButton];
                }
            }
            if(inputAccessoryView.doneBarButton){
                [arrAccessibilityItems addObject:inputAccessoryView.nextBarButton];
            }
            [inputAccessoryView setAccessibilityElements:arrAccessibilityItems];

        }
    }
}

问题是它是作为整个工具栏而不是逐个栏项目读出的。

ios accessibility uibarbuttonitem uitoolbar uiaccessibility
1个回答
0
投票

- (void)beginEditingHandler:(NSNotification *)notification {
    UIResponder *responder = notification.object;
    IQToolbar *inputAccessoryView = responder.inputAccessoryView;
    
    if (inputAccessoryView) {
        if ([inputAccessoryView isKindOfClass:[IQToolbar class]]) {
            // Clear any previous accessibility elements
            [inputAccessoryView setAccessibilityElements:nil];
            
            if (inputAccessoryView.previousBarButton) {
                inputAccessoryView.previousBarButton.isAccessibilityElement = YES;
                inputAccessoryView.previousBarButton.accessibilityLabel = @"Previous"; // Set an appropriate label
                // Add the previous button to the accessibility elements
                [inputAccessoryView addAccessibilityElement:inputAccessoryView.previousBarButton];
            }
            
            if (inputAccessoryView.nextBarButton && !inputAccessoryView.nextBarButton.isHidden) {
                inputAccessoryView.nextBarButton.isAccessibilityElement = YES;
                inputAccessoryView.nextBarButton.accessibilityLabel = @"Next"; // Set an appropriate label
                // Add the next button to the accessibility elements
                [inputAccessoryView addAccessibilityElement:inputAccessoryView.nextBarButton];
            }
            
            if (inputAccessoryView.titleBarButton && inputAccessoryView.titleBarButton.title.length > 0) {
                inputAccessoryView.titleBarButton.isAccessibilityElement = YES;
                inputAccessoryView.titleBarButton.accessibilityLabel = inputAccessoryView.titleBarButton.title; // Set an appropriate label
                // Add the title button to the accessibility elements
                [inputAccessoryView addAccessibilityElement:inputAccessoryView.titleBarButton];
            }
            
            if (inputAccessoryView.doneBarButton) {
                inputAccessoryView.doneBarButton.isAccessibilityElement = YES;
                inputAccessoryView.doneBarButton.accessibilityLabel = @"Done"; // Set an appropriate label
                // Add the done button to the accessibility elements
                [inputAccessoryView addAccessibilityElement:inputAccessoryView.doneBarButton];
            }
        }
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.