2013-04-05 4 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

+0

@CRD: Я проверил его :(, если я поместил некоторый журнал, он выглядит с помощью правильного указателя NSMenuItem – Amitg2k12

+0

Установили ли вы точку останова на setBoldStyle? Проверьте жирный шрифт (предположим, bBold - это опечатка выше - если это не так, и вы также есть экземпляр var bold ...), шаг за шагом, выбирает правильный шрифт? И т.д. – CRD

ответ

0

Вы должны использовать подобным образом:

if ([pTempMenuItem boldStyle]) { 
    NSLog(@"currently bold. change it"); 
    [pTempMenuItem setBoldStyle:NO]); 
} 
else{ 
    [pTempMenuItem setBoldStyle:YES]); 
    NSLog(@"currenlty normal. change it"); 
} 
0

Мы можем только догадываться, так как есть много информации, отсутствующей из вашего вопроса - где prevStatusIndex, pMenuItem, pMenu и clientStatus объявлены и данного значения? Каков допустимый диапазон clientStatus? И т.д.

В комментариях вы сказали, что используете отладчик и точки останова, но не указали, какие значения вы видели.

Вам действительно нужно предоставить более подробную информацию, чтобы люди могли вам помочь.

При условии выбранный индекс никогда не 0 (т.е. prevStatusIndex не 0 или clientStatus не -1) и pMenu указывает на правильное меню, то ваш код работает. Если выбранный индекс может быть нулевым, вам нужно изменить свой тест на де-жирный шрифт на prevStatusIndex >= 0, иначе первая запись в меню может быть выделена полужирным шрифтом, но не разблокирована.

HTH.