我要实现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