我要實現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];
任何想法是什麼問題?
它看起來像你試圖只從一個組中選擇一個項目 - 選擇一個項目,應取消選擇以前的選擇。一目瞭然,你的'setBoldStyle'看起來不錯,但第二塊代碼沒有足夠的顯示。邏輯看起來是正確的 - 如果之前的選擇取消選擇,則選擇新的選擇。如果有前面的選擇,你確定'if'正在評估爲'YES'嗎? HTH – CRD 2013-04-05 19:11:37
@CRD:我檢查了它:(如果我把一些日誌,它看起來它使用正確的NSMenuItem指針 – Amitg2k12 2013-04-06 11:10:00
你在setBoldStyle設置了一個斷點嗎?檢查粗體(我假設bBold是一個錯字 - 除非它不是和你也有一個實例var大膽...),一步一步,是否正確的字體被選中?等。 – CRD 2013-04-06 20:33:09