gpt4 book ai didi

Objective-C:在 -(void)drawRect 中使用 "if else"语句来获取复选框状态?

转载 作者:行者123 更新时间:2023-12-03 16:49:18 29 4
gpt4 key购买 nike

我正在尝试设计一个界面,当用户单击复选框时,它将在 NSView 框中显示图像。有 12 个复选框,我......在我的脑海中...... if else 语句的布局来处理复选框的所有不同组合。我已经在 -(void)drawRect:(NSRect)rect 声明中放置了 if else 语句,但它们似乎不起作用。 (我没有收到错误)。我发现,当程序首次启动时,它确实正确地评估了 if else 语句。但是,当我单击激活包含“setNeedsDisplay:”的操作的复选框时,不会重新评估“if else”语句。 (这当然意味着我不完全理解 setNeedsDisplay: 是如何工作的。lol)

我在不同的地方放置了几个 NSLog 语句来查看发生了什么。我在 -(void)drawRect 声明中有一个用于确保 setNeedsDisplay: 正常工作。确实如此。每当我单击复选框时,它就会激活 setNeedsDisplay。我还在“if else”语句中的两个位置放置了 NSLog :第一部分:

- (void)drawRect:(NSRect)rect {

if ([cNatural state] == NSOnState) {
NSLog(@"C Natural Selected");
NSPoint cNaturalPos;
cNaturalPos = NSMakePoint(35, 0);
NSImage * cNaturalImage;
cNaturalImage = [NSImage imageNamed:@"cNatural.png"];
[cNaturalImage dissolveToPoint:cNaturalPos fraction:(1.0)];}
else

if ([dFlat state] == NSOnState) {
NSPoint dFlatPos;
dFlatPos = NSMakePoint(35, 0);
NSImage * dFlatImage;
dFlatImage = [NSImage imageNamed:@"cSharp.png"];
[dFlatImage dissolveToPoint:dFlatPos fraction:(1.0)];}
else
......................

第一组“if else”条件的末尾有一个:

        if ([bNatural state] == NSOnState) {
NSPoint bNaturalPos;
bNaturalPos = NSMakePoint(35, 0);
NSImage * bNaturalImage;
bNaturalImage = [NSImage imageNamed:@"bNatural.png"];
[bNaturalImage dissolveToPoint:bNaturalPos fraction:(1.0)];}

else {
NSLog(@"No First Note Selection.");
NSPoint emptyStaffPos;
emptyStaffPos = NSMakePoint(35, 0);
NSImage * emptyStaffImage;
emptyStaffImage = [NSImage imageNamed:@"emptyStaff.png"];
[emptyStaffImage dissolveToPoint:emptyStaffPos fraction:(1.0)];}

我希望当程序首次加载时,“无第一个音符选择”会出现在我的控制台中。确实如此。没有发生的是,当我激活“cNatural”复选框时,它会在控制台中显示“无第一个音符选择”字符串。就像它没有注册复选框的状态更改一样。

为了确保我在 Interface Builder 中正确连接了复选框,我创建了这行代码,该代码行在切换复选框时激活:(此代码还包括 setNeedsDisplay:)

- (IBAction)rendStaffCanvas:(id)sender  {


[staffDrawingCanvas setNeedsDisplay:YES];

if ([cNatural state] == NSOnState) {
NSLog(@"C Natural checkbox: ON");
}
else {
NSLog(@"C Natural checkbox: OFF");
}
if ([dFlat state] == NSOnState) {
NSLog(@"D Flat checkbox: ON");
}
else {
NSLog(@"D Flat checkbox: OFF");
}
if ([dNatural state] == NSOnState) {
NSLog(@"D Natural checkbox: ON");
}

所有这些都按照我期望的方式在控制台中显示,但是 -(void)drawRect 部分中的“if else”语句似乎没有注册。

我已经到处寻找,但找不到解决方案。任何帮助将不胜感激。

这是我的 .m 文件相当冗长的代码:

#import "StaffCanvas.h"

@implementation StaffCanvas

- (IBAction)rendStaffCanvas:(id)sender {
[staffDrawingCanvas setNeedsDisplay:YES];
if ([cNatural state] == NSOnState) {
NSLog(@"C Natural checkbox: ON");
}
else {
NSLog(@"C Natural checkbox: OFF");
}
if ([dFlat state] == NSOnState) {
NSLog(@"D Flat checkbox: ON");
}
else {
NSLog(@"D Flat checkbox: OFF");
}
if ([dNatural state] == NSOnState) {
NSLog(@"D Natural checkbox: ON");
}
else {
NSLog(@"D Natural checkbox: OFF");
}
if ([eFlat state] == NSOnState) {
NSLog(@"E Flat checkbox: ON");
}
else {
NSLog(@"E Flat checkbox: OFF");
}
if ([eNatural state] == NSOnState) {
NSLog(@"E Natural checkbox: ON");
}
else {
NSLog(@"E Natural checkbox: OFF");
}
if ([fNatural state] == NSOnState) {
NSLog(@"F Natural checkbox: ON");
}
else {
NSLog(@"F Natural checkbox: OFF");
}
if ([gFlat state] == NSOnState) {
NSLog(@"G Flat checkbox: ON");
}
else {
NSLog(@"G Flat checkbox: OFF");
}
if ([gNatural state] == NSOnState) {
NSLog(@"G Natural checkbox: ON");
}
else {
NSLog(@"G Natural checkbox: OFF");
}
if ([aFlat state] == NSOnState) {
NSLog(@"A Flat checkbox: ON");
}
else {
NSLog(@"A Flat checkbox: OFF");
}
if ([aNatural state] == NSOnState) {
NSLog(@"A Natural checkbox: ON");
}
else {
NSLog(@"A Natural checkbox: OFF");
}
if ([bFlat state] == NSOnState) {
NSLog(@"B Flat checkbox: ON");
}
else {
NSLog(@"B Flat checkbox: OFF");
}
if ([bNatural state] == NSOnState) {
NSLog(@"B Natural checkbox: ON");
}
else {
NSLog(@"B Natural checkbox: OFF");
}

}

- (void)drawRect:(NSRect)rect {

if ([cNatural state] == NSOnState) {
NSLog(@"C Natural Selected");
NSPoint cNaturalPos;
cNaturalPos = NSMakePoint(35, 0);
NSImage * cNaturalImage;
cNaturalImage = [NSImage imageNamed:@"cNatural.png"];
[cNaturalImage dissolveToPoint:cNaturalPos fraction:(1.0)];}
else

if ([dFlat state] == NSOnState) {
NSPoint dFlatPos;
dFlatPos = NSMakePoint(35, 0);
NSImage * dFlatImage;
dFlatImage = [NSImage imageNamed:@"cSharp.png"];
[dFlatImage dissolveToPoint:dFlatPos fraction:(1.0)];}
else
if ([dNatural state] == NSOnState) {
NSPoint dNaturalPos;
dNaturalPos = NSMakePoint(35, 0);
NSImage * dNaturalImage;
dNaturalImage = [NSImage imageNamed:@"dNatural.png"];
[dNaturalImage dissolveToPoint:dNaturalPos fraction:(1.0)];}
else
if ([eFlat state] == NSOnState) {
NSPoint eFlatPos;
eFlatPos = NSMakePoint(35, 0);
NSImage * eFlatImage;
eFlatImage = [NSImage imageNamed:@"eFlat.png"];
[eFlatImage dissolveToPoint:eFlatPos fraction:(1.0)];}
else
if ([eNatural state] == NSOnState) {
NSPoint eNaturalPos;
eNaturalPos = NSMakePoint(35, 0);
NSImage * eNaturalImage;
eNaturalImage = [NSImage imageNamed:@"eNatural.png"];
[eNaturalImage dissolveToPoint:eNaturalPos fraction:(1.0)];}
else
if ([fNatural state] == NSOnState) {
NSPoint fNaturalPos;
fNaturalPos = NSMakePoint(35, 0);
NSImage * fNaturalImage;
fNaturalImage = [NSImage imageNamed:@"fNatural.png"];
[fNaturalImage dissolveToPoint:fNaturalPos fraction:(1.0)];}
else
if ([gFlat state] == NSOnState) {
NSPoint fSharpPos;
fSharpPos = NSMakePoint(35, 0);
NSImage * fSharpImage;
fSharpImage = [NSImage imageNamed:@"fSharp.png"];
[fSharpImage dissolveToPoint:fSharpPos fraction:(1.0)];}
else
if ([gNatural state] == NSOnState) {
NSPoint gNaturalPos;
gNaturalPos = NSMakePoint(35, 0);
NSImage * gNaturalImage;
gNaturalImage = [NSImage imageNamed:@"gNatural.png"];
[gNaturalImage dissolveToPoint:gNaturalPos fraction:(1.0)];}
else
if ([aFlat state] == NSOnState) {
NSPoint aFlatPos;
aFlatPos = NSMakePoint(35, 0);
NSImage * aFlatImage;
aFlatImage = [NSImage imageNamed:@"aFlat.png"];
[aFlatImage dissolveToPoint:aFlatPos fraction:(1.0)];}
else
if ([aNatural state] == NSOnState) {
NSPoint aNaturalPos;
aNaturalPos = NSMakePoint(35, 0);
NSImage * aNaturalImage;
aNaturalImage = [NSImage imageNamed:@"aNatural.png"];
[aNaturalImage dissolveToPoint:aNaturalPos fraction:(1.0)];}
else
if ([bFlat state] == NSOnState) {
NSPoint bFlatPos;
bFlatPos = NSMakePoint(35, 0);
NSImage * bFlatImage;
bFlatImage = [NSImage imageNamed:@"bFlat.png"];
[bFlatImage dissolveToPoint:bFlatPos fraction:(1.0)];}
else
if ([bNatural state] == NSOnState) {
NSPoint bNaturalPos;
bNaturalPos = NSMakePoint(35, 0);
NSImage * bNaturalImage;
bNaturalImage = [NSImage imageNamed:@"bNatural.png"];
[bNaturalImage dissolveToPoint:bNaturalPos fraction:(1.0)];}
else {
NSLog(@"No First Note Selection.");
NSPoint emptyStaffPos;
emptyStaffPos = NSMakePoint(35, 0);
NSImage * emptyStaffImage;
emptyStaffImage = [NSImage imageNamed:@"emptyStaff.png"];
[emptyStaffImage dissolveToPoint:emptyStaffPos fraction:(1.0)];}



if ([dFlat state] == NSOnState) {
NSPoint dFlatPos;
dFlatPos = NSMakePoint(70, 0);
NSImage * dFlatImage;
dFlatImage = [NSImage imageNamed:@"cSharp.png"];
[dFlatImage dissolveToPoint:dFlatPos fraction:(1.0)];}
else
if ([dNatural state] == NSOnState) {
NSPoint dNaturalPos;
dNaturalPos = NSMakePoint(70, 0);
NSImage * dNaturalImage;
dNaturalImage = [NSImage imageNamed:@"dNatural.png"];
[dNaturalImage dissolveToPoint:dNaturalPos fraction:(1.0)];}
else
if ([eFlat state] == NSOnState) {
NSPoint eFlatPos;
eFlatPos = NSMakePoint(70, 0);
NSImage * eFlatImage;
eFlatImage = [NSImage imageNamed:@"eFlat.png"];
[eFlatImage dissolveToPoint:eFlatPos fraction:(1.0)];}
else
if ([eNatural state] == NSOnState) {
NSPoint eNaturalPos;
eNaturalPos = NSMakePoint(70, 0);
NSImage * eNaturalImage;
eNaturalImage = [NSImage imageNamed:@"eNatural.png"];
[eNaturalImage dissolveToPoint:eNaturalPos fraction:(1.0)];}
else
if ([fNatural state] == NSOnState) {
NSPoint fNaturalPos;
fNaturalPos = NSMakePoint(70, 0);
NSImage * fNaturalImage;
fNaturalImage = [NSImage imageNamed:@"fNatural.png"];
[fNaturalImage dissolveToPoint:fNaturalPos fraction:(1.0)];}
else
if ([gFlat state] == NSOnState) {
NSPoint fSharpPos;
fSharpPos = NSMakePoint(70, 0);
NSImage * fSharpImage;
fSharpImage = [NSImage imageNamed:@"fSharp.png"];
[fSharpImage dissolveToPoint:fSharpPos fraction:(1.0)];}
else
if ([gNatural state] == NSOnState) {
NSPoint gNaturalPos;
gNaturalPos = NSMakePoint(70, 0);
NSImage * gNaturalImage;
gNaturalImage = [NSImage imageNamed:@"gNatural.png"];
[gNaturalImage dissolveToPoint:gNaturalPos fraction:(1.0)];}
else
if ([aFlat state] == NSOnState) {
NSPoint aFlatPos;
aFlatPos = NSMakePoint(70, 0);
NSImage * aFlatImage;
aFlatImage = [NSImage imageNamed:@"aFlat.png"];
[aFlatImage dissolveToPoint:aFlatPos fraction:(1.0)];}
else
if ([aNatural state] == NSOnState) {
NSPoint aNaturalPos;
aNaturalPos = NSMakePoint(70, 0);
NSImage * aNaturalImage;
aNaturalImage = [NSImage imageNamed:@"aNatural.png"];
[aNaturalImage dissolveToPoint:aNaturalPos fraction:(1.0)];}
else
if ([bFlat state] == NSOnState) {
NSPoint bFlatPos;
bFlatPos = NSMakePoint(70, 0);
NSImage * bFlatImage;
bFlatImage = [NSImage imageNamed:@"bFlat.png"];
[bFlatImage dissolveToPoint:bFlatPos fraction:(1.0)];}
else
if ([bNatural state] == NSOnState) {
NSPoint bNaturalPos;
bNaturalPos = NSMakePoint(70, 0);
NSImage * bNaturalImage;
bNaturalImage = [NSImage imageNamed:@"bNatural.png"];
[bNaturalImage dissolveToPoint:bNaturalPos fraction:(1.0)];}
else {
NSPoint emptyStaffPos;
emptyStaffPos = NSMakePoint(70, 0);
NSImage * emptyStaffImage;
emptyStaffImage = [NSImage imageNamed:@"emptyStaff.png"];
[emptyStaffImage dissolveToPoint:emptyStaffPos fraction:(1.0)];}


if ([dNatural state] == NSOnState) {
NSPoint dNaturalPos;
dNaturalPos = NSMakePoint(105, 0);
NSImage * dNaturalImage;
dNaturalImage = [NSImage imageNamed:@"dNatural.png"];
[dNaturalImage dissolveToPoint:dNaturalPos fraction:(1.0)];}
else
if ([eFlat state] == NSOnState) {
NSPoint eFlatPos;
eFlatPos = NSMakePoint(105, 0);
NSImage * eFlatImage;
eFlatImage = [NSImage imageNamed:@"eFlat.png"];
[eFlatImage dissolveToPoint:eFlatPos fraction:(1.0)];}
else
if ([eNatural state] == NSOnState) {
NSPoint eNaturalPos;
eNaturalPos = NSMakePoint(105, 0);
NSImage * eNaturalImage;
eNaturalImage = [NSImage imageNamed:@"eNatural.png"];
[eNaturalImage dissolveToPoint:eNaturalPos fraction:(1.0)];}
else
if ([fNatural state] == NSOnState) {
NSPoint fNaturalPos;
fNaturalPos = NSMakePoint(105, 0);
NSImage * fNaturalImage;
fNaturalImage = [NSImage imageNamed:@"fNatural.png"];
[fNaturalImage dissolveToPoint:fNaturalPos fraction:(1.0)];}
else
if ([gFlat state] == NSOnState) {
NSPoint fSharpPos;
fSharpPos = NSMakePoint(105, 0);
NSImage * fSharpImage;
fSharpImage = [NSImage imageNamed:@"fSharp.png"];
[fSharpImage dissolveToPoint:fSharpPos fraction:(1.0)];}
else
if ([gNatural state] == NSOnState) {
NSPoint gNaturalPos;
gNaturalPos = NSMakePoint(105, 0);
NSImage * gNaturalImage;
gNaturalImage = [NSImage imageNamed:@"gNatural.png"];
[gNaturalImage dissolveToPoint:gNaturalPos fraction:(1.0)];}
else
if ([aFlat state] == NSOnState) {
NSPoint aFlatPos;
aFlatPos = NSMakePoint(105, 0);
NSImage * aFlatImage;
aFlatImage = [NSImage imageNamed:@"aFlat.png"];
[aFlatImage dissolveToPoint:aFlatPos fraction:(1.0)];}
else
if ([aNatural state] == NSOnState) {
NSPoint aNaturalPos;
aNaturalPos = NSMakePoint(105, 0);
NSImage * aNaturalImage;
aNaturalImage = [NSImage imageNamed:@"aNatural.png"];
[aNaturalImage dissolveToPoint:aNaturalPos fraction:(1.0)];}
else
if ([bFlat state] == NSOnState) {
NSPoint bFlatPos;
bFlatPos = NSMakePoint(105, 0);
NSImage * bFlatImage;
bFlatImage = [NSImage imageNamed:@"bFlat.png"];
[bFlatImage dissolveToPoint:bFlatPos fraction:(1.0)];}
else
if ([bNatural state] == NSOnState) {
NSPoint bNaturalPos;
bNaturalPos = NSMakePoint(105, 0);
NSImage * bNaturalImage;
bNaturalImage = [NSImage imageNamed:@"bNatural.png"];
[bNaturalImage dissolveToPoint:bNaturalPos fraction:(1.0)];}
else {
NSPoint emptyStaffPos;
emptyStaffPos = NSMakePoint(105, 0);
NSImage * emptyStaffImage;
emptyStaffImage = [NSImage imageNamed:@"emptyStaff.png"];
[emptyStaffImage dissolveToPoint:emptyStaffPos fraction:(1.0)];}

NSLog(@"Redisplayed.");
NSPoint clefPos;
clefPos = NSMakePoint(0, 0);
NSImage * clefImage;
clefImage = [NSImage imageNamed:@"clefStart.png"];
[clefImage dissolveToPoint:clefPos fraction:(1.0)];


}

@end

最佳答案

这不是一个特别好的方法来解决这个问题,因为您将 View 视为模型。如果您还没有阅读过有关 Model View Controller (MVC) 模式的信息,请阅读该内容。

每个开关我都会有一个 bool NSUserDefault 或一个 obj-c 属性,具体取决于您希望它的持久性。

所以用你的开关来烹调你的 XIB,然后将开关的值绑定(bind)(它是检查器中左侧的第四个,带有两个绿色 Blob )开关的值到你的属性。

    @class FooController : NSObject
{

BOOL switch1;
BOOL switch2;

}

@property (readwrite,assign) BOOL switch1;
@property (readwrite,assign) BOOL switch2;

然后假设这是 NIB 的所有者对象

@class FooController

@synthesise switch1,switch2;

-(void)awakeFromNib
{

self.switch1 = YES; //switch1 starts on
self.switch2 = NO; //switch2 starts off


[self addObserver:self forKeyPath:@"switch1" options:0 context:NULL];
[self addObserver:self forKeyPath:@"switch2" options:0 context:NULL];


}

- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if([keyPath isEqualToString:@"switch1"]) { //do things related to switch1 }
else if ([keyPath isEqualToString:@"switch2"]) { //do things related to switch2 }
etc...
}

@end

self 观察 self 的事情看起来有点奇怪,但这意味着当绑定(bind)到相应属性的开关在界面中发生更改时,您就会了解它。而且您无需编写大量的 get/set 方法。

使用此方法同样可以观察 NSUserDefaults 对象

[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self 
forKeyPath:@"switch1"
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
context:NULL];

模型值的任何更改都会反射(reflect)在 View 中,并且 View 中的任何更改都会记录在观察协议(protocol)中

查看此文档 http://developer.apple.com/library/mac/documentation/cocoa/conceptual/KeyValueObserving/

关于Objective-C:在 -(void)drawRect 中使用 "if else"语句来获取复选框状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4997352/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com