2016-03-23 91 views
6

我想知道是否可以動態設置UITextView的文本方向並根據其內容?根據內容檢測文本方向

默認行爲是這樣的:如果你用LTR語言開始一行,那行將是LTR,但是如果你用RTL語言開始下一行,那行的方向變成RTL。

enter image description here

我想是基於第一個設置整個段落的方向。

可能嗎?

+0

到這裏看看:http://stackoverflow.com/questions/4905500/change-the-uitextview-text-direction我想它可以幫助 – PawelPawel

回答

4

我自己有這個問題。通過一些搜索,爲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) 
      } 
     } 
    } 
} 
+0

和原因。有時會發生碰撞 – Maysam

+0

@Maysam你能提供一些嗎?關於墜機情況的信息?此代碼在我的應用程序中正常工作。 –

+0

嘗試使用空文 – Maysam