Я должен реализовать 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
С приведенным выше фрагментом кода я могу установить полужирный текст, когда выбран конкретный 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
, когда был предыдущий выбор? ХТН - person CRD   schedule 05.04.2013