2013-04-05 47 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。