确定NSNaturalTextAlignment的实际文本对齐值?

时间:2014-03-08 14:54:42

标签: objective-c macos cocoa nstextview nsfont

我目前正在努力学习关于Cocoa的文字“架构”。我已经煞费苦心地学习了NSFontDescriptorNSTextTabNSTextView课程,我想我真的很了解这一切是如何运作的。但是,有一件事我似乎无法弄明白:NSNaturalTextAlignment。我的意思是,我明白了。据我所知,当字体的“脚本”是RTL时,自然对齐是正确的,当它是LTR时,保留自然对齐。所有这些都是有道理的。但是,如何确定字体脚本的自然方向?我问,因为我的小应用程序是如何设置的。我目前有一个迷你格式栏与通常的嫌疑人:

  • NSPopUpButton选择字体系列
  • NSPopUpButton选择字体
  • ACustomComboBox选择字体大小
  • NSSegmentedControl包含 B I ,U等的细分

在这些元素之后,我有了对齐控件,它也是NSSegmentedControl。在其中,我有四个选项:左,中,右和对齐。再次,非常基本的东西。对齐控件的巧妙之处在于我为每个段设置了与NSTextAlignment值对应的标记。因此,当按下“左”段时,所选文本对齐到左侧。 “居中”,“正确”和“合理”也是如此。

问题在于,归因字符串NSParagraphStyle很多时候都会返回NSNaturalTextAlignment值。

文档说明:

  

返回的值是“NSTextAlignment。”中描述的对齐之一。

     

使用NSNaturalTextAlignment的文本实际上是使用其他一个对齐方式显示的,具体取决于文本脚本的自然对齐方式。

好吧,我很高兴Apple了解文本脚本的自然对齐方式,但是我如何找到它呢?我目前已经实施了一个非常糟糕的解决方案,但老实说我无法解决这个问题。糟糕的解决方案如下所示:

- (void)updateTextAlignmentDisplayWithParagraphStyle:(NSParagraphStyle *)pStyle
{
    NSTextAlignment alignment = pStyle.alignment;

    if ( alignment == NSNaturalTextAlignment ) {

        // This seems like a horrible way to determine the correct alignment ...
        BOOL isRTL = ( self.textEditor.baseWritingDirection == NSWritingDirectionRightToLeft );

        if ( isRTL ) {
            alignment = NSRightTextAlignment;
        } else {
            alignment = NSLeftTextAlignment;
        }
    }

    [self.alignmentControl selectSegmentWithTag:alignment];
}

文本视图的“基本”方向并没有真正告诉我有关字体本身方向的任何信息,但至少它暗示了字体可能的方向。我不知道。我只是觉得有一个超级秘密NSFontDescriptor属性有这个信息,但我还没有找到它。可可大师,有什么建议吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

在NSText.h文件中定义

NSNaturalTextAlignment = 4 //表示脚本

的默认对齐方式

我认为脚本意味着书面文字。

您可以使用switch(pStyle.alignment或self.textEditor.baseWritingDirection)更改代码,并为每个对齐添加大小写。

我不是专家,但我认为,这是你需要知道的,向前发展。有关对齐的信息可能是Font的一部分,但这是推测性的!它也可以从用户设置键盘的默认语言中获取。文档或互联网中的NSLocale可能允许更深入地了解这个主题。