0

選択した NSMenuItem が Bold Text を持つように 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

上記のコードを使用すると、特定の 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

あなたの質問には多くの情報が欠けているため、推測することしかできprevStatusIndexません。の有効範囲は? 等。pMenuItempMenuclientStatusclientStatus

コメントで、デバッガーとブレークポイントを使用したと述べましたが、どのような値が表示されたかは示されませんでした。

人々があなたを助けることができるように、あなたは本当にもっと詳細を提供する必要があります.

選択したインデックスが決して 0 でなく (つまりprevStatusIndex、0 でもclientStatus-1 でもなく) pMenu、正しいメニューを指している場合、コードは機能します。選択したインデックスがゼロになる可能性がある場合は、太字のテストを変更する必要があります。prevStatusIndex >= 0それ以外の場合は、メニューの最初のエントリを太字にすることはできますが、太字を解除することはできません。

HTH。

于 2013-04-08T09:36:01.510 に答える