@hamstergene 是在正确的轨道上,但正在比较菜单项的标题,而不是标签,这是错误的,原因如下:
- 这意味着您无法将应用程序国际化。
- 它引入了拼写错误的可能性。
- 这是一种低效的比较;比较字符串中的每个字符比比较单个整数值花费的时间更长。
说了这么多,NSPopUpButton
很难在菜单项中插入标签,因此您需要使用所选项目的索引:
假设您使用以下方法创建菜单项:
[typePopUp removeAllItems];
[typePopUp addItemsWithTitles: [NSArray arrayWithObjects: @"Choose one...", @"Price per character", @"Percent saved", nil]];
然后创建一个enum
与数组中标题的顺序相匹配的:
typedef enum {
ItemChooseOne,
ItemPricePerCharacter,
ItemPercentSaved
} ItemIndexes;
然后比较选中项的索引,如下:
- (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 = @"%";
多重赋值有效,因为is的结果。当涉及到 setter 时,情况并非如此。更正的代码在上面。x = y
y
编辑根据 OP 的更多信息,对这个答案进行了大量编辑。