gpt4 book ai didi

swift - 根据内容检测文本方向

转载 作者:IT王子 更新时间:2023-10-29 05:36:13 24 4
gpt4 key购买 nike

我想知道是否可以根据其内容动态设置 UITextView 的文本方向?

默认行为是这样的:如果您以 LTR 语言开始一行,则该行将是 LTR,但如果您以 RTL 语言开始下一行,则该行的方向将变为 RTL。

enter image description here

我想要的是根据第一个段落设置整个段落的方向。

这可能吗?

最佳答案

我自己也遇到过这个问题。通过一些搜索,为 UITextView 制作了这个扩展,它检测第一个字母的语言并在需要时将其设为 RTL。您需要在设置文本后调用该函数,因此您可能希望在“UITextViewDelegate 文本更改”方法中调用它。

extension UITextView {
func detectRightToLeft() {
if let text = self.text where !text.isEmpty {
let tagschemes = NSArray(objects: NSLinguisticTagSchemeLanguage)
let tagger = NSLinguisticTagger(tagSchemes: tagschemes as! [String], options: 0)
tagger.string = text

let language = tagger.tagAtIndex(0, scheme: NSLinguisticTagSchemeLanguage, tokenRange: nil, sentenceRange: nil)
if language?.rangeOfString("he") != nil || language?.rangeOfString("ar") != nil || language?.rangeOfString("fa") != nil {
self.text = text.stringByReplacingOccurrencesOfString("\n", withString: "\n")
self.textAlignment = .Right
self.makeTextWritingDirectionRightToLeft(nil)
}else{
self.textAlignment = .Left
self.makeTextWritingDirectionLeftToRight(nil)
}
}
}
}

当然这很困惑而且不完美。但这对我有用。你可以明白这个想法。

swift 3:

extension UITextView {
func detectRightToLeft() {
if let text = self.text, !text.isEmpty {
let tagschemes = NSArray(objects: NSLinguisticTagSchemeLanguage)
let tagger = NSLinguisticTagger(tagSchemes: tagschemes as! [String], options: 0)
tagger.string = text

let language = tagger.tag(at: 0, scheme: NSLinguisticTagSchemeLanguage, tokenRange: nil, sentenceRange: nil)
if language?.range(of: "he") != nil || language?.range(of: "ar") != nil || language?.range(of: "fa") != nil {
self.text = text.replacingOccurrences(of: "\n", with: "\n")
self.textAlignment = .right
self.makeTextWritingDirectionRightToLeft(nil)
}else{
self.textAlignment = .left
self.makeTextWritingDirectionLeftToRight(nil)
}
}
}
}

关于swift - 根据内容检测文本方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36175704/

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