2010-12-14 2 views
0

모두!) 나는 내 수업에 IBAction를 방법 (체크 박스 클릭)를 가지고 내가 굵은 상태로 체크 박스를 (클릭하여 글꼴 속성을 변경하려면 : 누군가가 나를 도울 수 있다면 난로컬 클래스 변수를 변경하는 방법 IBAction

문제는) 매우 기뻐 ^거야 . IBAction 메서드에서 로컬 클래스 변수를 변경하려고했습니다. 내 - drawRect : 메서드에 의해 작동하지 않습니다. 변수가 변경되지 않습니다. IBAction 메서드에서 로컬 변수를 변경하는 방법 또는 다른 방법이 있습니까? 감사합니다. . 여기에서 'YES'를 'isBold'변경 변수 아래

#import <Foundation/Foundation.h> 
@interface BigLetterView : NSView { 
NSColor *bgColor; 
NSString *string; 
NSString *testString; 
BOOL isHighlighted; 
BOOL isBold; 
BOOL isItalic; 
IBOutlet NSButton *boldButton; 
NSMutableDictionary *attributes; 

} 
@property(retain, readwrite) NSColor *bgColor; 
@property(copy, readwrite) NSString *string; 
@property(readwrite) BOOL isBold; 

- (void)drawStringCenteredIn:(NSRect)r; 
- (void)prepareAttributes; 
- (void)changeIsBold; 
- (IBAction)savePDF:(id)sender; 
- (IBAction)makeBold:(id)sender; //it's that method 
- (IBAction)setItalic:(id)sender; 

. (메서드 호출 - 디버거에서 테스트).

- (IBAction)makeBold:(id)sender 
{ 
if ([boldButton state] == NSOnState) { 
isBold = YES; 
NSLog(@"Action bold=%d", isBold); 
} 
else { 
isBold = NO; 
NSLog(@"Action bold=%d", isBold); 
} 

} 

하지만 여기 isBold는 여전히 '아니오'입니다.

- (void)drawRect:(NSRect)rect { 
NSRect bounds = [self bounds]; 
[bgColor set]; 
[NSBezierPath fillRect:bounds]; 
[self drawStringCenteredIn:bounds]; 
NSLog(@"isBold: %d",isBold); //HERE prints 'isBold:0' 
if (isBold == YES) { 
NSFont *aFont = [attributes objectForKey:NSFontAttributeName]; 
NSFontManager *fontManager = [NSFontManager sharedFontManager]; 
[attributes setObject:[fontManager convertFont:aFont toHaveTrait:NSBoldFontMask] forKey:NSFontAttributeName]; 
} 

//whether this view is firstResponder 
if ([[self window] firstResponder] == self && 
[NSGraphicsContext currentContextDrawingToScreen]) { 
[NSGraphicsContext saveGraphicsState]; 
NSSetFocusRingStyle(NSFocusRingOnly); 
[NSBezierPath fillRect:bounds]; 
[NSGraphicsContext restoreGraphicsState]; 

} 
} // drawRect 

아론 Hillegass 책에서 20 장을하고 있습니다.

+3

코드를 표시하십시오. 특히 조치 방법이 실제로 호출되는지 확인하는 방법을 알려주십시오. –

+0

의견을 주셔서 감사합니다, 올레! 끝냈어. – Alexander

답변

0

지금까지 보여준 내용이보기에는 좋아 보이지만 분명히 작동하지 않거나 여기에 없을 것입니다. 당신의 -makeBold: 방법의 끝에이 줄을 추가하십시오 :이 자체 그리기를 다시보기를 강제

[self setNeedsDisplay]; 

; 뷰가 다시 그려지지 않는다는 것이 문제 일 수 있습니다.

+0

답변 해 주셔서 감사합니다. Jeff! 1 분 전에 그것을 시도했다. - 아무 것도 바뀌지 않아. 문제는 내가 IBAction에서 변수를 변경하려고 시도하고 다른 변수에서이 변수 값을 확인하는 것입니다. IBAction (i print log)의 변수가 변경되었지만 다른 메소드 변수의 이전 값이 변경되었습니다. (IBAction의 변수처럼 보이고 나머지 클래스에는 다른 메모리 공간이 있습니다.) – Alexander

+0

어떻게 뷰를 생성합니까? –

+0

먼저 클래스를 만들고, NSView에서 상속 한 다음 IB에서 'Custom View'를 드래그하여 Class Identity에서 기본 NSView를 이전에 생성 된 클래스로 설정했습니다. – Alexander