You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何跳过工具栏单个Bar Button Item无障碍焦点,保留其他项焦点

解决IQToolbar无障碍跳过标题按钮且保持单个BarItem焦点的问题

先修正代码里的明显错误

你在添加Done按钮时写错了对象,把nextBarButton重复加入列表,这直接导致Done按钮没被正确纳入无障碍焦点,是核心问题之一:

if(inputAccessoryView.doneBarButton){
    // 替换原错误代码,加入正确的Done按钮
    [arrAccessibilityItems addObject:inputAccessoryView.doneBarButton];
}

跳过标题按钮的正确方式

要跳过标题按钮的无障碍焦点,直接不把它加入accessibilityElements数组即可,删掉标题按钮相关的添加逻辑:

// 移除这段标题按钮的添加代码
/*
if(inputAccessoryView.titleBarButton){
    IQTitleBarButtonItem *titleBtn= inputAccessoryView.titleBarButton;
    if(titleBtn.title.length>0){
        [arrAccessibilityItems addObject:inputAccessoryView.titleBarButton];
    }
}
*/

确保单个BarItem获得独立焦点

设置accessibilityElements后,需要保证两个关键设置,避免Toolbar被当作整体朗读:

  1. 每个加入数组的BarButtonItem的isAccessibilityElement设为YES(默认是YES,但自定义控件可能被修改,手动设置更保险)
  2. 把Toolbar本身的isAccessibilityElement设为NO,让系统只识别列表里的单个BarItem

修改后的完整beginEditingHandler方法:

- (void)beginEditingHandler:(NSNotification *)notification {
    UIResponder *responder = notification.object;
    IQToolbar *inputAccessoryView = (IQToolbar *)responder.inputAccessoryView;
    if (![inputAccessoryView isKindOfClass:[IQToolbar class]]) {
        return;
    }

    NSMutableArray *arrAccessibilityItems = [NSMutableArray array];

    // 处理Previous按钮
    if (inputAccessoryView.previousBarButton && !inputAccessoryView.previousBarButton.isHidden) {
        inputAccessoryView.previousBarButton.isAccessibilityElement = YES;
        [arrAccessibilityItems addObject:inputAccessoryView.previousBarButton];
    }

    // 处理Next按钮
    if (inputAccessoryView.nextBarButton && !inputAccessoryView.nextBarButton.isHidden) {
        inputAccessoryView.nextBarButton.isAccessibilityElement = YES;
        [arrAccessibilityItems addObject:inputAccessoryView.nextBarButton];
    }

    // 处理Done按钮
    if (inputAccessoryView.doneBarButton && !inputAccessoryView.doneBarButton.isHidden) {
        inputAccessoryView.doneBarButton.isAccessibilityElement = YES;
        [arrAccessibilityItems addObject:inputAccessoryView.doneBarButton];
    }

    // 关键:不让Toolbar本身成为无障碍元素
    inputAccessoryView.isAccessibilityElement = NO;
    // 设置自定义无障碍元素列表
    inputAccessoryView.accessibilityElements = arrAccessibilityItems;

    // 额外:确保标题按钮完全被无障碍忽略
    if (inputAccessoryView.titleBarButton) {
        inputAccessoryView.titleBarButton.isAccessibilityElement = NO;
    }
}

测试注意

修改后关闭VoiceOver再重新打开,确保无障碍设置生效。

内容的提问来源于stack exchange,提问作者Shajo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:02:44