【问题标题】:NSTextField - make selected text bold, italic or underline?NSTextField - 使选定的文本加粗、斜体或下划线?
【发布时间】:2011-02-01 11:07:09
【问题描述】:

我有一个 NSTextField,用户可以在其中编写文本。我希望能够制作 3 个按钮:粗体、斜体和下划线;这些按钮应该将文本字段中的用户选择更改为粗体、斜体或下划线。

谁能给我指点一下如何做到这一点?

【问题讨论】:

    标签: objective-c cocoa nstextfield


    【解决方案1】:

    首先是启用富文本支持,您可以在 Interface Builder 中通过检查检查器中的“富文本”选项或使用setAllowsEditingTextAttributes: 的代码来实现。

    那就是NSAttributedStrings。

    不过,最大的问题是您似乎需要对所选文本应用更改。 NSTextFields 无法做到这一点。仅限NSTextViews。

    如果你能改变它,那就去吧,它会让事情变得更容易。但是,如果您确实需要坚持使用NSTextField,您可能需要访问字段编辑器。每个窗口都有一个关联,它是在幕后处理文本的。

    NSTextView *editor = (NSTextView *)[window fieldEditor:YES forObject:myTextField]
    

    然后就可以愉快的调用NSTextView的方法setSelectedTextAttributes:了。

    阅读有关字段编辑器here at Applein CocoaDev 的更多信息

    【讨论】:

      【解决方案2】:

      假设你的 NSTextfield * 是 textField,下面的代码强调了选择:

      NSMutableAttributedString * as = [[[textField attributedStringValue] mutableCopy] autorelease];
      [as beginEditing];
      [as addAttribute:NSUnderlineStyleAttributeName
                 value:[NSNumber numberWithInt:NSUnderlineStyleSingle]
                 range:[[[textField window] fieldEditor:YES forObject:textField] selectedRange]];
      
      [as endEditing];
      [textField setAttributedStringValue:as];
      

      【讨论】:

      • 但这强调了前三个字符,而不是选择。 (另外,为什么不使用[[[textField attributedStringValue] mutableCopy] autorelease]?)我想知道,你能问一下字段编辑器的选择是什么吗?
      • 我实际上找到了一个简单的解决方案.. 抱歉迟到了。我所做的是在 IB 中为我的应用程序添加一个字体管理器,然后为 NSMenu 分配一个格式面板(在所有 Mac 应用程序的最顶部),然后我将粗体菜单项连接到字体管理器(收到操作: addFontTrait :) 现在它可以工作了。
      • 现在我只需要让我的核心数据接受 NSAttributedString 而不是普通的 NSString .. 嗯 :-) 核心数据实体编辑器中没有属性字符串的数据类型..
      • 另外,您可以通过将模型键路径变量设置为值为 true 的 bool 类型,对给定的文本字段使用(粗体/斜体)绑定。
      猜你喜欢
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 2018-11-06
      • 2020-01-25
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多