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)
问题是它是作为整个工具栏而不是逐个栏项目读出的。
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)
| 归档时间: |
|
| 查看次数: |
265 次 |
| 最近记录: |