UIAccessibility - 不为NSMutableAttributedString工作

时间:2017-05-30 19:08:49

标签: ios swift voiceover uiaccessibility nsmutableattributedstring

我有一个文字“用户可以在这里进行更改”。字母“here”是可点击的,并点击它。[检查图像] [1]

默认的配音不是专注于它而不是读出来。

如何使其专注于语音,使其可点击并发出名称。

为UI Label创建了一个扩展,并计算了NSRange中的attributionText帧。

        let attribute : [String : Any] = [NSForegroundColorAttributeName: Theme.getColor(forCode: "LinkBlue")]
        let strToUse = contentForKey("String")
        range =  (footerText as NSString).range(of: strToUse)
        let attributedString = NSMutableAttributedString(string: footerText)
        if let textRange = range{
             attributedString.addAttributes(attribute, range:textRange)
        }
        footerVw.headerTitleLabel.attributedText = attributedString
        footerVw.isUserInteractionEnabled = true
        let tap = UITapGestureRecognizer(target: self, action: #selector(MyProfileViewController.showPage))
        footerVw.headerTitleLabel.addGestureRecognizer(tap)
  

提前致谢。

     

[1]:https://i.stack.imgur.com/uLQZF.png

2 个答案:

答案 0 :(得分:1)

使VoiceOver可以独立调整视图的内容:

  • theView.isAccessibilityElement = true
  • allHeirarchicalParentViews.isAccessibilityElement = false

OR

  • hierarchicalParent.isAccessibilityElement = false
  • hierarchicalParent实施UIAccessibilityContainer协议。

如果您要详细说明如何实施此视图,尤其是“用户现在可以进行更改”之间的确切分隔。和'在这里'是的,我们可以提供更准确的答案。 EX:你处理什么类型的视图,什么类型的布局视图,包含那些不同文本位的视图是分开的,还是只是被归属的字符串,它是活动的元素以及如何...等等?

假设我们只想让整个UILabel代表可聚焦区域,并且整个事物都是活动的(场景1)。这个解决方案将成为一个简单的问题。当VoiceOver激活accessibilityElements时,激活点是聚焦矩形的中间。因此,让我们假设您的UILabel上有一些类型的点击监听器,而VoiceOver焦点包含整个文本。您想将accessibilityActivationPoint设置为" here"文字是。

yourUILabel.accessibilityActivationPoint = calculatePointOf(text:'Here')

答案 1 :(得分:0)

  

默认配音不集中精力也不朗读。

达到目标的一种好方法是将可变字符串包装在UITextView 内,其委托将允许打开任意数量的链接:您将无法达到目的一个UILabel

假设您正在使用UITableViewHeaderFooterView,请尝试将此包装器添加到footerVw contentView中。

  

我如何使它集中于配音,使其可单击并发音呢?

这是一个激活所选链接的 specific VoiceOver gesture :看看this answer,其中包含一个完整的示例,其中包括说明焦点和激活方式的示例。