我想知道是否可以動態設置UITextView
的文本方向並根據其內容?根據內容檢測文本方向
默認行爲是這樣的:如果你用LTR語言開始一行,那行將是LTR,但是如果你用RTL語言開始下一行,那行的方向變成RTL。
我想是基於第一個設置整個段落的方向。
可能嗎?
我想知道是否可以動態設置UITextView
的文本方向並根據其內容?根據內容檢測文本方向
默認行爲是這樣的:如果你用LTR語言開始一行,那行將是LTR,但是如果你用RTL語言開始下一行,那行的方向變成RTL。
我想是基於第一個設置整個段落的方向。
可能嗎?
我自己有這個問題。通過一些搜索,爲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)
}
}
}
}
這肯定是混亂和不完美,但它爲我工作。你可以得到。想法
斯威夫特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)
}
}
}
}
到這裏看看:http://stackoverflow.com/questions/4905500/change-the-uitextview-text-direction我想它可以幫助 – PawelPawel