如何设置Cocoa NSLevelIndicatorCell值?

时间:2009-10-13 19:19:58

标签: objective-c cocoa

我有一个tableview。 tableview中的一列使用NSLevelIndicatorCell。

我希望能够允许用户编辑关卡指示器的警告和关键值,以便当他们在“警告级别”文本框中输入值时,它会更改显示的关卡指示器的警告值所有tableview的行。

我是Objective-C的新手,所以我到目前为止所能解决的问题是我必须需要一个委托方法来观看文本框但是如果我成功了,那么我该如何发送新值到特定的tableview列,以便更新发生在所有行上(即如何将哪些消息发送到tableview并定位tableview中列内的单元格)?

如果有人需要,我会提出解决方案的代码。

- (IBAction)setWarningLevel:(id)sender {
    double v;
    NSScanner *ns = [NSScanner scannerWithString:[warnLevel stringValue]];
    [ns scanDouble:&v];
    [levelIndicator setWarningValue:v];
}  

2 个答案:

答案 0 :(得分:2)

这是使用Cocoa bindings的教科书案例。只需将文本字段的值绑定到表视图中的NSLevelIndicatorCell(在Interface Builder中执行此操作)。更新应该自动进行。

如果您将绑定应用于IB中的单元格,我认为它应该适用于表视图中的所有单元格。但是,如果没有,则需要编写几行代码,以便在每次创建表中的新行时设置绑定。上面的链接将详细解释所有内容,但基本上您将在文本字段和正在创建的行中的级别指示器实例之间的代码中设置键值观察器关系。

答案 1 :(得分:1)

我想你可能已经过度了。

NSTextField是NSControl的子类,因此您需要在NSControl的文档中查找有用的函数。

尝试重写这样的话;假设您从warnLevel文本字段中获取值。

- (IBAction)setWarningLevel:(id)sender {
    double v = [warnLevel doubleValue];
    [levelIndicator setWarningValue:v];
}

虽然这通常会缩短到这一点;

- (IBAction)setWarningLevel:(id)sender {
    [levelIndicator setWarningValue:[warnLevel doubleValue]];
}

您可能应该验证文本字段是否有效。如果您只选择几个数字,请查看使用步进控制。

通常情况下,对于Cocoa来说,如果你觉得自己跳过了太多的篮筐,有时候会有更简单的方法。

通常; - )