如何更改本地类变量IBAction

时间:2010-12-14 17:05:24

标签: objective-c cocoa ibaction

大家好! 如果有人能帮助我,我会很高兴^)

问题是: 我的班级中有IBAction方法(复选框点击),我想通过单击复选框(变为粗体状态)来更改字体属性。 我尝试在IBAction方法中更改本地类变量,以便在我的 - drawRect:方法中检查它,因为它不起作用 - 变量不会改变。 如何在IBAction方法中更改局部变量或者可能有另一种方法? 谢谢。

#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;

以下变量'isBold'变为'YES'。 (方法被调用 - 我在调试器中测试)。

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

P.S.I从Aaron Hillegass的书中做了第20章。

1 个答案:

答案 0 :(得分:0)

到目前为止你所展示的内容看起来不错,但显然它不起作用或者你不会在这里。尝试将此行添加到-makeBold:方法的末尾:

[self setNeedsDisplay];

这将强制视图重新绘制自己;您的问题可能只是视图没有被重新绘制。