如何将 NSMutableString 绑定到 NSTextView 的值?

2024-03-21

好的,所以我正在尝试在 Xcode 中为自己设置一个非常简单的程序。
我有一个窗口(在界面生成器中),其中包含一个 NSTextView 和一个 NSButton。在我的 AppController 类中,我声明了一个NSMutableString作为财产。我想要做的是为字符串设置一个初始值,比如@“First Entry\n”,然后将其绑定到NSTextView。当我按下按钮时,一个方法,-(IBAction)appendToString被称为附加@"Another Line\n" to the NSMutableString.
我希望这些变化能够反映在NSTextView通过绑定和键值观察,而不是通过声明IBOutlet并手动更新内容。我还想在文本视图中进行更改以编辑NSMutable string.

不幸的是,我非常困惑,并且没有任何运气弄清楚这一点。

如何做到这一点有哪些基本步骤?

*****编辑*****

好吧,Peter Hosey 间接解决了这个问题。我忘记了我必须使用 setLogString 方法,而不是使用 [logString appendFormat:]。这是我最终得到的代码:

在AppController.h中:

#import <Cocoa/Cocoa.h>
@interface AppController : NSObject {
    IBOutlet NSButton *appendButton;
    NSString *logString;
    IBOutlet NSTextView *thatView;
}
@property (readwrite, copy) NSString *logString;
-(IBAction)hitIt:(id)sender;
@end

应用控制器.m:

#import "AppController.h"
@implementation AppController
-(void)awakeFromNib
{
}
-(id)init
{
    [super init];   
    logString = @"First Line\n";
    return self;
}
-(IBAction)hitIt:(id)sender
{
    [self setLogString:[logString stringByAppendingString:@"Hey, Another Line!\n"]];
}
@synthesize logString;
@end

然后,在 InterfaceBuilder 中,我将 NSTextView 绑定到 AppController.logString,并且必须设置“连续更新值”标志,以便我对文本字段所做的更改也会对字符串进行。

非常感谢大家的帮助!


在我的 AppController 类中,我已将 NSMutableString 声明为属性。

这是正确的、符合 MVC 的解决方案。模型的主要所有者应该是控制器,而不是视图。所有视图都应该从控制器获取模型。

但是,您不应该公开字符串的可变性。然后,任何使用该属性的东西都可能会尝试直接改变字符串,而 AppController 不知道更改并能够通知该属性的任何观察者。该属性应声明为 NSString 和 readwrite,以便提供一个访问器来用新字符串替换该值。

我想要做的是为字符串设置一个初始值,比如@“First Entry\n”,然后将其绑定到 NSTextView。

设置支持属性的实例变量的值init.

在IB中绑定NSTextView。然后,当您加载笔尖时,它就已经被绑定了。

注意你要设置ivarbefore加载笔尖。如果您先加载笔尖,文本视图将看不到更改,因为直接设置 ivar (就像您应该在init,以避免产生属性副作用)是在观察者(视图)背后进行更改。如果在加载笔尖时已经进行了更改(并且视图开始观察),则视图不会错过任何内容。

当我按下按钮时,会出现一个方法 -(IBAction)appendToString ...

Cocoa 中的每一个动作都只需要一个参数——不多也不少。该参数是发送消息的控件。因此,正确的签名是:

- (IBAction) appendToString:(id)sender;

... 被调用,它将 @"Another Line\n" 附加到 NSMutableString。

您需要做的就是向属性询问当前字符串,制作可变副本,进行更改,并将修改后的字符串设置为属性的新值。不要忘记释放那个可变副本。

我希望这些更改通过绑定和键值观察的方式反映在 NSTextView 中,而不是通过声明 IBOutlet 并手动更新内容。我还想在文本视图中进行更改以编辑 NSMutable 字符串。

当您绑定文本视图时,这两种情况都会免费发生value绑定到您的 AppController 的属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 NSMutableString 绑定到 NSTextView 的值? 的相关文章

  • 快速以编程方式清除 NSView

    我有一个NSView连接到自定义类 该视图上有一些图画 class LineDrawer NSView var linear NSBezierPath var storage NSUserDefaults standardUserDefau
  • 如何在 Objective-C 中创建委托?

    我知道代表如何工作 也知道如何使用它们 但我该如何创建它们呢 Objective C 委托是一个已分配给delegate属性另一个对象 要创建一个 您需要定义一个实现您感兴趣的委托方法的类 并将该类标记为实现委托协议 例如 假设您有一个UI
  • 似乎无法在 NSMenuItem 上 setEnabled:NO

    我已经子类化了NSMenu并连接了一堆NSMenuItem通过界面生成器 我已经通过调试器进行了测试 看看它们确实得到了初始化 菜单设置为不自动启用项目 仍然当我将任何 NSMenuItem 设置为 myMenuItem setEnable
  • 键值观察和 NSButton 状态

    我试图观察复选框状态 并在复选框状态更改时在应用程序中进行适当的更改 在使用复选框管理窗口的窗口管理器中 我有以下观察者设置 void awakeFromNib myCheckBox addObserver self forKeyPath
  • 调度队列:如何判断它们是否正在运行以及如何停止它们

    我只是在玩 GCD 并且编写了一个 CoinFlipper 玩具应用程序 抛硬币的方法如下 void flipCoins NSUInteger nFlips Create the queues for work dispatch queue
  • WPF 数据绑定和级联转换器?

    我想知道使用 wpf 数据绑定时是否可以级联转换器 例如就像是
  • TextView、iOS 和 OSX 中的彩虹文本

    我正在尝试向我的应用程序添加一些不同的文本颜色以融合到图像中 我收到了很多用户想要彩虹文本颜色并重复的输入 例如这个词 stackoverflow看起来像这样 s red t orange a yellow c green k blue o
  • 使用基类活动将多个活动(选项卡)绑定到服务

    发帖后发现这些 http code google com p android issues detail id 2665 http code google com p android issues detail id 2665http co
  • WPF 图像控件源绑定

    我是 WPF 和 C 的新手 我尝试实现以下功能 但在多次尝试后失败了 谁能帮我吗 我有一个图像控件
  • 将 NSDictionary 保存到 plist

    我正在使用这篇文章中找到的代码 Plist 中的多个数组 https stackoverflow com questions 6192451 mulitple arrays from plist 6193397 6193397 具有相同的
  • 如何设置主窗口的位置和大小(以编程方式)?

    我正在使用 OS X 的最新默认项目 10 11 Xcode 7 0 它使用故事板 层次结构如下 Window Controller gt View Controller 我想设置窗口的初始位置和框架大小 显然用户可以更改它 但我希望它以一
  • Java 开发人员在 Mac OS 上遇见 Objective-C

    很多年前我就用 C 进行过开发 但现在我主要是一名 Java 软件工程师 鉴于我拥有一部 iPhone 准备下个月购买 MacBook 并且总体上对开始 Mac OS 开发 使用 Objective C 感兴趣 我想我应该提出这个问题 下一
  • 绑定到多个索引器

    我正在尝试将索引属性与两个索引器绑定 该属性看起来像这样 public Item this int x int y get return items x y set items x y value 根据http msdn microsoft
  • 10.11 NSCollectionView - 动态确定单元格大小

    OS X v10 11 AppKit 发行说明 https developer apple com library mac releasenotes AppKit RN AppKit 10 11CollectionView建议可以根据每个项
  • 从 WPF 绑定列表框中删除项目

    我有一个带有 ListBox 称为 listMyItems 的 WPF 应用程序 它已成功绑定到我创建的 MyItems 类 我有一个名为 currentMyItems 的 MyItems 列表 然后将其作为 ItemSource 分配给
  • NSPredicate 格式字符串不起作用

    在我的代码中 我想检查记录是否已存在 以便我知道是创建它还是更新它 但我遇到了一个问题 问题是当我使用这个时 NSPredicate pred NSPredicate predicateWithFormat ATTRIBUTE ID idN
  • Cocoa - 在另一个 xib 上显示 xib

    谁能告诉我如何 或指导我有关信息 在另一个 xib 笔尖 上显示 xib 笔尖 我希望如何放置它 以便我可以以编程方式将它移动到主笔尖 就像这样 这显然不起作用 void drawRect NSRect dirtyRect NSRect c
  • 绑定到列表的复杂模型

    我一直在尝试 MVCContrib 中的 NameValueDeserializer 它将采用 IList 作为控制器的参数 并将表单及其元素绑定到它 但我只是想知道 MVC Beta 是否有任何方法可以做到这一点 我知道您可以绑定强类型对
  • Apple 如何在机场菜单打开时更新它? (当 NSMenu 已经打开时如何更改它)

    我有一个状态栏项目 可以弹出一个 NSMenu 并且我有一个委托集 并且它已正确连接 void menuNeedsUpdate NSMenu menu工作正常 也就是说 该方法设置为在显示菜单之前调用 我需要监听该方法并触发异步请求 稍后在
  • 为每行 NSTableView 文本着色

    我有一个 NSTableView 它显示我拥有的对象数组 对于每个对象 行 我想根据在每个对象上运行的函数的结果来更改显示的文本的颜色 因此 例如表中存在于另一个列表 或其他一些要求 中的所有对象 我想以绿色文本显示它们 不存在的对象以红色

随机推荐