默认情况下,屏幕阅读器将选择整个视图,双击时无法跟踪链接。实际上,在辅助功能检查器上按下激活会导致应用程序委托崩溃而控制台中没有任何堆栈跟踪。我试过搞乱UITextView本身的可访问性特征,但我没有运气。
let quoteAttributedStr = NSMutableAttributedString(string: "This is a test String" + " ")
let enableLinkText = NSAttributedString(string: "this is the clickable text", attributes: dummyLinkAttribute)
quoteAttributedStr.append(enableLinkText)
return quoteAttributedStr
答案 0 :(得分:0)
要使NSMutableAttributedString的一部分可选,您需要将其设置为如此链接:
quoteAttributedStr.setAsLink("string that you wish to be selectable goes here", linkURL: "url")
您还需要添加UITextViewDelegate,并添加:
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {
}
处理它。
这是我忘记包含的setAsLink的扩展名:
extension NSMutableAttributedString {
public func setAsLink(_ textToFind:String, linkURL:String) -> Bool {
let foundRange = self.mutableString.range(of: textToFind)
if foundRange.location != NSNotFound {
self.addAttribute(NSLinkAttributeName, value: linkURL, range: foundRange)
return true
}
return false
}
}
答案 1 :(得分:0)
该问题涉及必须在UITextView中激活链接时使用的specific VoiceOver gesture。
我创建了一个空白项目(iOS 12,Xcode 10),其中包含以下代码段,以在myTextView
元素中获得2个URL:
class TextViewURLViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var myTextView: UITextView!
let myString = "Follow this developers guide if you already know the VoiceOver gestures."
let myDevURL = "https://a11y-guidelines.orange.com/mobile_EN/dev-ios.html"
let myGesturesURL = "https://a11y-guidelines.orange.com/mobile_EN/voiceover.html"
override func viewDidLoad() {
let attributedString = NSMutableAttributedString(string: myString)
attributedString.addAttribute(.link,
value: myDevURL,
range: NSRange(location: 12,
length: 17))
attributedString.addAttribute(.link,
value: myGesturesURL,
range: NSRange(location: 52,
length: 19))
myTextView.attributedText = attributedString
myTextView.font = UIFont(name: myTextView.font!.fontName,
size: 25.0)
}
func textView(_ textView: UITextView,
shouldInteractWith URL: URL,
in characterRange: NSRange,
interaction: UITextItemInteraction) -> Bool {
UIApplication.shared.open(URL, options: [:])
return false
}
}
按照下面的步骤激活链接:
links
项目。Open
操作。按照上面的代码片段,您可以使UITextView中的属性字符串可访问,然后双击并按住以打开它,直到弹出窗口出现在链接上方。