加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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的更多信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读