objective-c – 如何为NSPopUpButton进行项目更改?
发布时间:2020-12-16 09:47:24 所属栏目:百科 来源:网络整理
导读:我正在尝试实现一个基于NSPopUpButton状态更改标签的系统. 到目前为止,我已经尝试执行下面代码中显示的内容,但每当我运行它时,代码只会跳转到else子句,抛出警报 - (IBAction)itemChanged:(id)sender { if([typePopUp.stringValue isEqualToString: @"Price p
我正在尝试实现一个基于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是在正确的轨道上,但是正在比较菜单项的标题,而不是比较标签,这是错误的,原因如下:
>这意味着您无法将应用程序国际化. 说了这么多,NSPopUpButton使得很难在菜单项中插入标签,因此您需要使用所选项的索引: 假设您使用以下命令创建菜单项: [typePopUp removeAllItems]; [typePopUp addItemsWithTitles: [NSArray arrayWithObjects: @"Choose one...",@"Price per character",@"Percent saved",nil]]; 然后创建一个与数组中标题顺序相匹配的枚举: 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 = @"%"; 多项赋值有效,因为x = y的结果是y.涉及二传手时不是这种情况.更正的代码在上面. 编辑这个答案经过大量编辑后,来自OP的更多信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |