2013-04-05 3 views
0
내가 NSMenuItem에게 NSMenuItem가 굵은 텍스트가 있어야 선택하는 방식을 구현해야

전환이 내가 코드의 위 peiece으로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]; 

어떤 아이디어가 잘못 되었나요?

+0

그룹에서 하나의 항목 만 선택하려는 것 같습니다. 항목을 선택하면 이전 선택을 선택 해제해야합니다. 한눈에'setBoldStyle'은 괜찮아 보이지만 두 번째 코드 블록은 충분하지 않습니다. 논리는 올바르게 보입니다. 이전 선택이 선택되어 있지 않으면 선택을 취소 한 다음 새 선택을 선택하십시오. 이전 선택이있을 때'if'가'YES'로 평가되고 있습니까? HTH – CRD

+0

@CRD : 체크해 봤는데 :(로그를 넣으면 NSMenuItem 포인터가 올바르게 보이게됩니다. – Amitg2k12

+0

setBoldStyle에 중단 점을 설정 했습니까? 굵은 체로 확인하십시오 (bBold가 위의 오타라고 가정합니다. 또한 인스턴스 굵은 굵게 ...), 단계를 통해 올바른 글꼴을 선택합니까? 등 – 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는, pMenuclientStatus 선언과 가치를 부여? clientStatus의 유효 범위는 무엇입니까? 기타

당신은 디버거와 중단 점을 사용했지만 어떤 값을 보았는지는 언급하지 않았다는 의견을 들었을 것입니다.

민속이 도움이 될 수 있도록 세부 정보를 제공해야합니다.

가 제공 선택된 인덱스는 0 결코 (즉 prevStatusIndex는 0이 아니거나 clientStatus -1 없습니다) 올바른 메뉴로 pMenu 점 다음 코드가 작동합니다. 선택한 색인이 0 일 수있는 경우, 굵기를 줄이기위한 시험을 prevStatusIndex >= 0으로 변경해야합니다. 그렇지 않으면 메뉴의 첫 번째 항목을 굵게 표시 할 수 있지만 굵은 글씨로 표시 할 수는 없습니다.

HTH.

관련 문제