如何在获取UITextView文本后设置文本对齐方式?

4
我正在尝试根据文本方向设置textViewtextAlignment,如果我的textView有文本(从右到左,如阿拉伯语)方向,则我想将textAlignment设置为 NSTextAlignmentRight,否则我的对齐方式将是NSTextAlignmentLeft。现在的问题是,我知道如何在输入UITextView时检查文本方向,但一旦我们获得了UITextView中的文本,我们如何检查它呢?下面是我的截图和代码enter image description here

enter image description here

 if ([self.txtOutputTranslator baseWritingDirectionForPosition:[self.txtOutputTranslator beginningOfDocument] inDirection:UITextStorageDirectionForward] == UITextWritingDirectionLeftToRight)
{
    self.txtOutputTranslator.textAlignment=NSTextAlignmentLeft;
}
else
{
    self.txtOutputTranslator.textAlignment=NSTextAlignmentRight;

}

我的代码显示,一旦我获得输出文本,就会检查文本方向,但它总是运行else条件,因为我已经在属性中将UITextView对齐到右侧。任何建议都将不胜感激。提前致谢。


你愿意听取建议吗?你可以将所有文本居中对齐,这样就不必担心文本是左对齐还是右对齐了。 - Zhang
寻找最佳解决方案,这将是最后的选择。顺便说一下,谢谢建议 :) - jamil
2个回答

3
似乎baseWritingDirectionForPosition方法返回的是根据textview的文本对齐方式而定。因此,您需要根据语言检查书写方向。由于您手动进行应用程序,可以检查要翻译的语言,并且可以已经指定哪些是rtl或ltr。如需进一步阅读,请参考发现文本书写方向的轻量级方法NSString的语言检测。但是,您的问题应该更容易解决。祝好运。

3

@TechSeeko的答案是正确的,这里有一个Swift 4的例子:

func textViewDidChange(_ textView: UITextView) {
    let baseWritingDirection = textView.baseWritingDirection(for: textView.beginningOfDocument, in: .forward)
    switch baseWritingDirection {
    case .leftToRight:
        textView.textAlignment = .left // for example
    case .rightToLeft:
        textView.textAlignment = .right // for example
    case .natural:
        // WARNING: use natural alignment carefully as it won't work with reusable table view cells. In common cases baseWritingDirection won't return this parameter
        textView.textAlignment = .natural
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接