Swift s位置(或零,如果不可用) 如果让wr=textview.tokenizer.RangeEnclosuringPosition(tapPos!,带:.word,间接寻址:UITextLayoutDirection.right.rawValue){ 打印(pos) 返回textview.text(在:wr中)! }否则{ 返回“” } } }

Swift s位置(或零,如果不可用) 如果让wr=textview.tokenizer.RangeEnclosuringPosition(tapPos!,带:.word,间接寻址:UITextLayoutDirection.right.rawValue){ 打印(pos) 返回textview.text(在:wr中)! }否则{ 返回“” } } },swift,nsattributedstring,nsrange,textkit,Swift,Nsattributedstring,Nsrange,Textkit,当我在模拟器上运行我的应用程序时,我选择了一首诗,它运行得很好 正常使用: 问题在于出现多次的单词。例如,对于“الحمن”这个词,无论我选择第一个还是第二个,突出显示的诗句始终是第一个 我做错了什么? 提前谢谢 我理解你的问题,当用户选择一个特定的词时,你想突出显示整个诗句 逻辑中的问题是,您确定了用户选择的单词,但该单词不一定是唯一的,因此当您搜索该单词时(使用textView.text.range(of:detectedText)),您会返回第一个结果,该结果可能是用户实际选择的,也可

当我在模拟器上运行我的应用程序时,我选择了一首诗,它运行得很好

正常使用:

问题在于出现多次的单词。例如,对于“الحمن”这个词,无论我选择第一个还是第二个,突出显示的诗句始终是第一个

我做错了什么?
提前谢谢

我理解你的问题,当用户选择一个特定的词时,你想突出显示整个诗句

逻辑中的问题是,您确定了用户选择的单词,但该单词不一定是唯一的,因此当您搜索该单词时(使用
textView.text.range(of:detectedText)
),您会返回第一个结果,该结果可能是用户实际选择的,也可能不是

如果标记器正确理解您的文本,一个可能的解决方案是在确定用户的选择时使用不同的
TextGranularity
。而不是:

textview.tokenizer.rangeEnclosingPosition(tapPos!, with: .word, inDirection: UITextLayoutDirection.right.rawValue)
你可以试试:

textview.tokenizer.rangeEnclosingPosition(tapPos!, with: .sentence, inDirection: UITextLayoutDirection.right.rawValue)

正如我理解你的问题,当用户选择一个特定的词时,你想突出显示整个诗句

逻辑中的问题是,您确定了用户选择的单词,但该单词不一定是唯一的,因此当您搜索该单词时(使用
textView.text.range(of:detectedText)
),您会返回第一个结果,该结果可能是用户实际选择的,也可能不是

如果标记器正确理解您的文本,一个可能的解决方案是在确定用户的选择时使用不同的
TextGranularity
。而不是:

textview.tokenizer.rangeEnclosingPosition(tapPos!, with: .word, inDirection: UITextLayoutDirection.right.rawValue)
你可以试试:

textview.tokenizer.rangeEnclosingPosition(tapPos!, with: .sentence, inDirection: UITextLayoutDirection.right.rawValue)

range(of:)
仅返回第一个匹配项。必须循环才能执行此操作,或者使用NSRegularExpression查找所有事件…循环是什么意思?我获取了所有的文本视图text@Larme您能帮忙吗?
range(of:)
只返回第一个匹配项。必须循环才能执行此操作,或者使用NSRegularExpression查找所有事件…循环是什么意思?我获取了所有的文本视图text@Larme你能帮个忙吗?你说的“它没用”是什么意思?你的应用程序的行为会改变一切吗?是否有错误消息?我们需要更多的信息。应用程序的行为仍然是一样的。你说的“它不起作用”是什么意思?你的应用程序的行为会改变一切吗?是否有错误消息?我们需要更多信息。应用程序的行为仍然是一样的