在任何时候只检查一个菜单项不能在mac cocoa应用程序中工作 [英] Keeping only one menu item checked at any one time not working in mac cocoa application

查看:68
本文介绍了在任何时候只检查一个菜单项不能在mac cocoa应用程序中工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一个mac应用程序,在菜单中有一个菜单项数据集,它打开以列出一些数据集,这些数据集稍后会在选中时更改自定义视图但目前无关紧要。单击其中一个菜单项时,应取消选中菜单中的所有项目,并且应该选中唯一一个应该单击该项目的项目。例如,如果我点击降雨量观察,降雨量观察应该是唯一被检查的项目。这是我的代码,它应该选择一个项目,但它不会:

I am writing a mac application and in the menu there is a menu item 'Data Sets' which opens to list some data sets that will later change a custom view when selected but that doesn't matter at the moment. When one of the menu items is clicked, all items in the menu should be unchecked and the only one that should checked it the item that was clicked. For example if I click 'Rainfall Observation', 'Rainfall Observation' should be the only item that is checked. This is my code and it should select a single item but it doesn't:

@implementation AppDelegate

// Enum containing each data set name
enum {
    kDASHBRDtag = 0,
    kRAINOBStag,
    kVISIOBStag,
    kINFROBStag,
    kLIGHOBStag,
    kRAINFCStag,
    kTEMPFCStag,
    kCLOUFCStag,
    kPRESFCStag,
    kPRESCRTtag,
    kHOUROBStag,
    kRTXTFCStag,
    kTRIHFCStag,
    kDAIYFCStag,
    kMOUNFCStag,
    kREGEXTRtag,
    kCLMHISTtag,
    kCLMAVRGtag,
    kCLMANOMtag,
    kHISTOBStag,
    kMARNOBStag
};

// IBActions for each menu item - each one calls that checkDataSet: method with its respective data set from the enum above
- (IBAction)menuDASHBRD:(id)sender {
    [self checkDataSet:kDASHBRDtag];
}
- (IBAction)menuRAINOBS:(id)sender {
    [self checkDataSet:kRAINOBStag];
}
- (IBAction)menuVISIOBS:(id)sender {
    [self checkDataSet:kVISIOBStag];
}
- (IBAction)menuINFROBS:(id)sender {
    [self checkDataSet:kINFROBStag];
}
- (IBAction)menuLIGHOBS:(id)sender {
    [self checkDataSet:kLIGHOBStag];
}
- (IBAction)menuRAINFCS:(id)sender {
    [self checkDataSet:kRAINFCStag];
}
- (IBAction)menuTEMPFCS:(id)sender {
    [self checkDataSet:kTEMPFCStag];
}
- (IBAction)menuCLOUFCS:(id)sender {
    [self checkDataSet:kCLOUFCStag];
}
- (IBAction)menuPRESFCS:(id)sender {
    [self checkDataSet:kPRESFCStag];
}
- (IBAction)menuPRESCRT:(id)sender {
    [self checkDataSet:kPRESCRTtag];
}
- (IBAction)menuHOUROBS:(id)sender {
    [self checkDataSet:kHOUROBStag];
}
- (IBAction)menuRTXTFCS:(id)sender {
    [self checkDataSet:kRTXTFCStag];
}
- (IBAction)menuTRIHFCS:(id)sender {
    [self checkDataSet:kTRIHFCStag];
}
- (IBAction)menuDAIYFCS:(id)sender {
    [self checkDataSet:kDAIYFCStag];
}
- (IBAction)menuMOUNFCS:(id)sender {
    [self checkDataSet:kMOUNFCStag];
}
- (IBAction)menuREGEXTR:(id)sender {
    [self checkDataSet:kREGEXTRtag];
}
- (IBAction)menuCLMHIST:(id)sender {
    [self checkDataSet:kCLMHISTtag];
}
- (IBAction)menuCLMAVRG:(id)sender {
    [self checkDataSet:kCLMAVRGtag];
}
- (IBAction)menuCLMANOM:(id)sender {
    [self checkDataSet:kCLMANOMtag];
}
- (IBAction)menuHISTOBS:(id)sender {
    [self checkDataSet:kHISTOBStag];
}
- (IBAction)menuMARNOBS:(id)sender {
    [self checkDataSet:kMARNOBStag];
}

- (void)checkDataSet:(NSInteger)dataSet {
    // Uncheck all menu items in the menu
    [self.menuDASHBRD setState:NSOffState];
    [self.menuRAINOBS setState:NSOffState];
    [self.menuVISIOBS setState:NSOffState];
    [self.menuINFROBS setState:NSOffState];
    [self.menuLIGHOBS setState:NSOffState];
    [self.menuRAINFCS setState:NSOffState];
    [self.menuTEMPFCS setState:NSOffState];
    [self.menuCLOUFCS setState:NSOffState];
    [self.menuPRESFCS setState:NSOffState];
    [self.menuPRESCRT setState:NSOffState];
    [self.menuHOUROBS setState:NSOffState];
    [self.menuRTXTFCS setState:NSOffState];
    [self.menuTRIHFCS setState:NSOffState];
    [self.menuDAIYFCS setState:NSOffState];
    [self.menuMOUNFCS setState:NSOffState];
    [self.menuREGEXTR setState:NSOffState];
    [self.menuCLMHIST setState:NSOffState];
    [self.menuCLMAVRG setState:NSOffState];
    [self.menuCLMANOM setState:NSOffState];
    [self.menuHISTOBS setState:NSOffState];
    [self.menuMARNOBS setState:NSOffState];
    
    // Switch on the recieved data set from enum and check its respective menu item
    switch (dataSet) {
        case kDASHBRDtag: [self.menuDASHBRD setState:NSOnState]; break;
        case kRAINOBStag: [self.menuRAINOBS setState:NSOnState]; break;
        case kVISIOBStag: [self.menuVISIOBS setState:NSOnState]; break;
        case kINFROBStag: [self.menuINFROBS setState:NSOnState]; break;
        case kLIGHOBStag: [self.menuLIGHOBS setState:NSOnState]; break;
        case kRAINFCStag: [self.menuRAINFCS setState:NSOnState]; break;
        case kTEMPFCStag: [self.menuTEMPFCS setState:NSOnState]; break;
        case kCLOUFCStag: [self.menuCLOUFCS setState:NSOnState]; break;
        case kPRESFCStag: [self.menuPRESFCS setState:NSOnState]; break;
        case kPRESCRTtag: [self.menuPRESCRT setState:NSOnState]; break;
        case kHOUROBStag: [self.menuHOUROBS setState:NSOnState]; break;
        case kRTXTFCStag: [self.menuRTXTFCS setState:NSOnState]; break;
        case kTRIHFCStag: [self.menuTRIHFCS setState:NSOnState]; break;
        case kDAIYFCStag: [self.menuDAIYFCS setState:NSOnState]; break;
        case kMOUNFCStag: [self.menuMOUNFCS setState:NSOnState]; break;
        case kREGEXTRtag: [self.menuREGEXTR setState:NSOnState]; break;
        case kCLMHISTtag: [self.menuCLMHIST setState:NSOnState]; break;
        case kCLMAVRGtag: [self.menuCLMAVRG setState:NSOnState]; break;
        case kCLMANOMtag: [self.menuCLMANOM setState:NSOnState]; break;
        case kHISTOBStag: [self.menuHISTOBS setState:NSOnState]; break;
        case kMARNOBStag: [self.menuMARNOBS setState:NSOnState]; break;
    }
}

@end



I我一直在玩代码,有一次我收到了'错误'(不是破坏性异常,而是日志窗口中的消息)并且检查状态没有改变,另一次,所有选定的项目都保持检查状态。我不知道这是我的代码或其他类似项目的默认行为的问题,因为我删除了菜单项IBActions之一的所有代码,它仍然检查哪些不应该发生因为我没有告诉它去检查。我不知道该怎么办,我希望任何时候都只能检查一件物品。谢谢。

推荐答案

这篇关于在任何时候只检查一个菜单项不能在mac cocoa应用程序中工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆