gpt4 book ai didi

objective-c - 如何为 NSPopUpButton 进行项目更改?

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:49 24 4
gpt4 key购买 nike

我正在尝试实现一个根据 NSPopUpButton 的状态更改标签的系统。
到目前为止,我已经尝试执行下面代码中显示的操作,但每当我运行它时,代码都会跳转到 else 子句,引发警报

- (IBAction)itemChanged:(id)sender {
if([typePopUp.stringValue isEqualToString: @"Price per character"]) {
_currency = [currencyField stringValue];
[additionalLabel setStringValue: _currency];

}
else if([typePopUp.stringValue isEqualToString: @"Percent saved"]) {
_currency = additionalLabel.stringValue = @"%";
}

else alert(@"Error", @"Please select a calculation type!");
}

那么这里有人知道如何解决这个问题吗?

最佳答案

@hamstergene 在正确的轨道上,但比较的是菜单项的标题,而不是 标签,这是错误的,原因如下:

  1. 这意味着您无法将应用程序国际化。
  2. 它介绍了拼写错误的可能性。
  3. 这是一个低效的比较;比较字符串中的每个字符比比较单个整数值花费的时间更长。

话虽如此,NSPopUpButton 使得很难将标签插入到菜单项中,因此您需要使用所选项目的索引:

假设您使用以下方法创建菜单项:

[typePopUp removeAllItems];
[typePopUp addItemsWithTitles: [NSArray arrayWithObjects: @"Choose one...", @"Price per character", @"Percent saved", nil]];

然后创建一个匹配数组中标题顺序的枚举:

typedef enum {
ItemChooseOne,
ItemPricePerCharacter,
ItemPercentSaved
} ItemIndexes;

然后比较选中的item索引,如下:

- (IBAction)itemChanged:(id)sender {
NSInteger index = [(NSPopUpButton *)sender indexOfSelectedItem];
switch (index) {
case ItemChooseOne:
// something here
break;
case ItemPricePerCharacter:
_currency = [currencyField stringValue];
[additionalLabel setStringValue: _currency];
break;
case ItemPercentSaved:
_currency = @"%"; // See NOTE, below
additionalLabel.stringValue = @"%";
break;
default:
alert(@"Error", @"Please select a calculation type!");
}
}

注意您的代码中的以下行不正确:

_currency = additionalLabel.stringValue = @"%";

多重赋值有效是因为x = y结果y。当涉及 setter 时,情况并非如此。更正后的代码如上。

编辑根据来自 OP 的更多信息,对这个答案进行了大量编辑。

关于objective-c - 如何为 NSPopUpButton 进行项目更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18759553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com