gpt4 book ai didi

ios - 使 UITextView 中的短语可点击

转载 作者:行者123 更新时间:2023-11-29 06:00:15 25 4
gpt4 key购买 nike

我想知道如何使电子文本可点击并在点击特定文本时播放声音。

enter image description here

我需要检测单击了哪个短语,单击该短语时播放声音并更改该特定短语的颜色。

这是我创建故事并将其分配给 UITextView 时的函数

func showStory(){
var ph:String?

var s:String = ""

var index = 0
for phrase in phrasesArray {
ph = phrase
let data = ph!.data(using: String.Encoding.utf8)

do{
let txt = try NSAttributedString(data: data!,
options: [.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue],
documentAttributes: nil)

s = txt.string

let attributedString = NSMutableAttributedString(string: s, attributes: [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 14) , NSAttributedStringKey.link: audioArray[index]])

attributedText.append(attributedString)

index += 1
}catch{}

fullStory.attributedText = attributedText

}
}

这是我处理用户点击 UITextView 的时间

func textView(_ textView: UITextView, shouldInteractWith audio: URL, in characterRange: NSRange) -> Bool{

//This is not working
attributedText.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: characterRange)

let soundFile = Bundle.main.url(forResource: audio.absoluteString, withExtension: "mp3")

do{
try sound = AVAudioPlayer(contentsOf: soundFile!)
sound.prepareToPlay()

}catch{
print(error)
}

sound.play()


return false
}

最佳答案

首先,textView 委托(delegate)方法签名是错误的。假设短语数组是一个数组文字,您不需要转换为数据来分配 AttributedStrings。我编写了一个示例项目来说明如何实现这一点。点击 TextView 内容的唯一方法是分配 .link 类型的属性。在示例中,关键是为链接属性分配不同的 url,如果没有,CoreText 将整个 textview 内容视为单个链接。

👉 Here´s示例项目。深入了解一下,如果有帮助请告诉我。

关于ios - 使 UITextView 中的短语可点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54750106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com