2016-03-23 16 views
6

UITextView'un metin yönünü dinamik olarak ve içeriğine göre ayarlamak mümkün mü acaba?İçeriğe göre metin yönünü saptamak

Varsayılan davranış şu şekildedir: Eğer bir LTR diliyle bir satır başlatırsanız, bu satır, LTR olacaktır, ancak bir sonraki satırı bir RTL diliyle başlatırsanız, çizginin yönü RTL olarak değişir. Benim istediğim

enter image description here

ilk birine dayalı tüm paragraflar yönü ayarlanır.

Mümkün mü?

+0

buraya bakın: http://stackoverflow.com/questions/4905500/change-the-uitextview-text-direction Ben yardımcı olabilir sanırım – PawelPawel

cevap

4

Bu sorunu kendim yaşadım. Biraz arama yaparak, UITextView için ilk harfin dilini algılayan ve gerektiğinde RTL yapan bu uzantıyı yaptı. Metin ayarladıktan sonra fonksiyon çağırmak zorunda, bu yüzden UITextViewDelegate metin değişikliği" yönteminde diyoruz isteyebilirsiniz.

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) 
     } 
    } 
} 
} 

Şüphesiz bu mükemmel dağınık ve değildir. Ama bu benim için çalıştı. Sen alabilirsiniz . Fikir

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) 
      } 
     } 
    } 
} 
+0

Ve nedenler. bazen bir kazada – Maysam

+0

@Maysam Biraz daha sağlayabilir misiniz çarpışma durumu hakkında bilgi? Bu kod, uygulamalarda iyi çalışıyor. –

+0

Boş olarak dene – Maysam

İlgili konular