2013-04-05 90 views
0

我要实现NSMenuItem选定NSMenuItem应该有粗体文字这样的方式,这是我做了什么,NSMenuItem切换粗体字体风格

@implementation NSMenuItem (Font) 

-(void)setBoldStyle:(bool)bBold{ 
    NSString* title = [self title] ; 

    NSFont *pFont = (bold)?[NSFont boldSystemFontOfSize:14]:[NSFont menuFontOfSize:12]; 

    NSDictionary* fontAttribute = [NSDictionary dictionaryWithObjectsAndKeys: 
            pFont, NSFontAttributeName, 
            nil] ; 

    NSMutableAttributedString* newTitle = [[NSMutableAttributedString alloc] initWithString:title 
                       attributes:fontAttribute] ; 

    [self setAttributedTitle:newTitle] ; 
    [newTitle release] ; 

} 

@end 

随着上面的代码peiece,我能够设置粗体文本,当一个特定的NSMenuItem被选中, ,但如果它需要切换(意思如果一个项目是粗体较早,现在应该是正常的),那么它不会发生,

这是我称之为的方式,

// have we selected any menuitem yet 
    if (prevStatusIndex >0){ 
     // then deselect it 
     pTempMenuItem = [pMenu itemAtIndex:prevStatusIndex]; 
     [pTempMenuItem setBoldStyle:NO]; 
    } 

    prevStatusIndex = clientStatus+1; 
    pTempMenuItem = [pMenu itemAtIndex:prevStatusIndex]; // 1 because a separator added 
    [pTempMenuItem setBoldStyle:YES]; 

任何想法是什么问题?

+0

它看起来像你试图只从一个组中选择一个项目 - 选择一个项目,应取消选择以前的选择。一目了然,你的'setBoldStyle'看起来不错,但第二块代码没有足够的显示。逻辑看起来是正确的 - 如果之前的选择取消选择,则选择新的选择。如果有前面的选择,你确定'if'正在评估为'YES'吗? HTH – CRD 2013-04-05 19:11:37

+0

@CRD:我检查了它:(如果我把一些日志,它看起来它使用正确的NSMenuItem指针 – Amitg2k12 2013-04-06 11:10:00

+0

你在setBoldStyle设置了一个断点吗?检查粗体(我假设bBold是一个错字 - 除非它不是和你也有一个实例var大胆...),一步一步,是否正确的字体被选中?等。 – CRD 2013-04-06 20:33:09

回答

0

您需要使用类似于此:

if ([pTempMenuItem boldStyle]) { 
    NSLog(@"currently bold. change it"); 
    [pTempMenuItem setBoldStyle:NO]); 
} 
else{ 
    [pTempMenuItem setBoldStyle:YES]); 
    NSLog(@"currenlty normal. change it"); 
} 
0

我们只能猜测是有大量的信息,从你的问题缺少 - 哪里prevStatusIndexpMenuItempMenuclientStatus申报和给定的值? clientStatus的有效范围是什么?等

在你说过的评论中,你已经使用了调试器和断点,但没有指出你看到了什么值。

你真的需要提供更多的细节,民间可以帮助你。

提供选择的指数是永远不为0(即prevStatusIndex不为0或clientStatus不是-1)和pMenu指向正确的菜单,然后你的代码工作。如果所选索引可以为零,那么您需要将您的测试更改为去除粗体,以便prevStatusIndex >= 0,否则菜单中的第一个条目可以加粗但不可拆开。

HTH。