如何跳过对一个栏按钮项目的辅助功能焦点并保持对工具栏其他栏按钮项目的关注

Sha*_*ajo 8 accessibility uitoolbar uibarbuttonitem ios uiaccessibility

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

我可以使用accessibilityElementsHidden跳过整个工具栏的辅助功能

但我只想跳过标题栏按钮的辅助功能焦点。

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

但这不起作用。

所以我设置了AccessibilityElements属性,它跳过标题栏并读出右侧的“完成”按钮。但根本没有个人关注“完成”按钮。当我使用AccessibilityElements时,各个栏按钮项目缺少焦点。

更新:

我在这里添加了一个观察者

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
Run Code Online (Sandbox Code Playgroud)

这是观察者

 [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(beginEditingHandler:) name:UITextFieldTextDidBeginEditingNotification object:nil];
Run Code Online (Sandbox Code Playgroud)

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

  - (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];

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Eug*_*nyk 1

IQToolbar 设置标题按钮如下

    @objc open var titleBarButton: IQTitleBarButtonItem {
        get {
            if privateTitleBarButton == nil {
                privateTitleBarButton = IQTitleBarButtonItem(title: nil)
                privateTitleBarButton?.accessibilityLabel = "Title"
                privateTitleBarButton?.accessibilityIdentifier = privateTitleBarButton?.accessibilityLabel
            }
            return privateTitleBarButton!
        }

        set (newValue) {
            privateTitleBarButton = newValue
        }
    }
Run Code Online (Sandbox Code Playgroud)

您必须按如下方式进行子类化IQToolbar和覆盖titleBarButton

open class MyToolbar: IQToolbar {
    open var titleBarButton: IQTitleBarButtonItem {
        get {
            let titleBarButton = super.titleBarButton
            titleBarButton.customView.subviews.first?.isAccessibilityElement = false
            return titleBarButton
        }
        set (newValue) {
            super.titleBarButton = newValue
        }
    }
}
Run Code Online (Sandbox Code Playgroud)