0

我必须以这样一种方式实现 NSMenuItem 选择 NSMenuItem 应该有 Bold Text ,这就是我所做的,

@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

使用上面的代码,我可以在选择特定的 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];

知道出了什么问题吗?

4

2 回答 2

0

我们只能猜测,因为您的问题中缺少很多信息 - prevStatusIndexpMenuItempMenuclientStatus声明和给定的值在哪里?的有效范围是clientStatus多少?等等。

在您所说的评论中,您已经使用了调试器和断点,但没有说明您看到了什么值。

您确实需要提供更多详细信息,以便人们可以帮助您。

如果所选索引从不为 0(即prevStatusIndex不是 0 或clientStatus不是 -1)并且pMenu指向正确的菜单,那么您的代码就可以工作。如果选定的索引可以为零,那么您需要将去粗体测试更改为prevStatusIndex >= 0否则菜单中的第一个条目可以加粗但不能取消加粗。

HTH。

于 2013-04-08T09:36:01.510 回答
0

您需要使用类似于此:

if ([pTempMenuItem boldStyle]) {
    NSLog(@"currently bold. change it");
    [pTempMenuItem setBoldStyle:NO]);
}
else{
    [pTempMenuItem setBoldStyle:YES]);
    NSLog(@"currenlty normal. change it");
}
于 2013-04-05T10:15:53.830 回答