我正在尝试为UIActivityIndicatorView(在我的视图控制器viewDidLoad中以编程方式创建)提供可访问性标签。我将辅助功能标签设置为:
myIndicatorView.accessibilityLabel = @"Please wait, processing"
但是当我运行应用程序时,语音总是会读取"正在进行中#34;。我尝试使用辅助功能检查器在模拟器上进行调试,但每次指示器视图处于焦点时,它的标签为"正在进行中"。我假设,"正在进行中"是活动指标视图的默认语音文本,但我无法更改此标签。我想知道活动指示器视图的可访问标签是否永远不会被更改。 如果有人遇到这个问题并找到了解决方法,那么请帮助我。
答案 0 :(得分:5)
并不是说你没有改变它。这就是说,在后台,随着进度指示器的状态发生变化,iOS后端会将标签更新为适当的状态。这取决于您更改它的内容,因为在您更改状态后它可能会应用自己的更新。
我会把这件事留下来。与“正在进行中”相比,“请等待,处理”不提供其他信息。并且“进行中”是VoiceOver用户习惯于听到“进行中”状态进度指示器宣布的方式。更改此公告是针对一个没有视力的用户,将图像更改为旋转的米老鼠头的内容将会被发现。
如果你必须改变它,你想要做的不是设置属性,而是覆盖属性的getter方法的实现。为此,请提供UIActivityIndicatorView的自定义实现,以执行以下操作。
@interface MyActivityIndicator : UIActivityIndicatorView
@end
@implementation MYActivityIndicator
- (NSString*)accessibilityLabel {
if (self.isAnimating) {
return NSLocalizedString("ACTIVITY_INDICATOR_ACTIVE", nil);
} else {
return NSLocalizedString("ACTIVITY_INDICATOR_INACTIVE", nil);
}
}
答案 1 :(得分:0)
UIActivityIndicatorView
子类
根据控件的状态,accessibilityLabel
中UIActivityIndicatorView
getter的实现是动态的。因此,如果您设置了accessibilityLabel
,则可能会稍后更改。
以下UIActivityIndicatorView
子类会覆盖accessibilityLabel
的默认实现。它基于@ChrisCM在Objective C中的答案。
class MyActivityIndicatorView: UIActivityIndicatorView {
override var accessibilityLabel: String? {
get {
if isAnimating {
return NSLocalizedString("ACTIVITY_INDICATOR_ACTIVE", comment: "");
}
else {
return NSLocalizedString("ACTIVITY_INDICATOR_INACTIVE", comment: "");
}
}
set {
super.accessibilityLabel = newValue
}
}
}
在我的应用中,活动指示器仅在动画时在屏幕和VoiceOver上可见。因此,我只需要一个accessibilityLabel
值。除非明确设置,否则以下子类使用accessibilityLabel
的默认动态实现。如果设置,则无论状态如何,它都会使用该值。
class MyActivityIndicatorView: UIActivityIndicatorView {
private var accessibilityLabelOverride: String?
override var accessibilityLabel: String? {
get {
if accessibilityLabelOverride != nil {
return accessibilityLabelOverride
}
return super.accessibilityLabel
}
set {
accessibilityLabelOverride = newValue
}
}
}
// Example use
let activityIndicatorView = MyActivityIndicatorView(activityIndicatorStyle: .gray)
activityIndicatorView.accessibilityLabel = NSLocalizedString("ACTIVITY_INDICATOR", comment: "")