我有一个名为clickView的 NSView 的子类,如下所示。
// clickView.h
@interface clickView : NSView {
BOOL onOff;
}
- (BOOL)getOnOff;
// clickView.m
- (BOOL)getOnOff {
return onOff;
}
- (void)mouseDown:(NSEvent *)event {
if (onOff) {
onOff = NO;
} else {
onOff = YES;
}
[self setNeedsDisplay:YES];
NSLog(@"%@",self.identifier);
}
如果用户点击它,它会利用其 drawRect 方法(此处未显示)用颜色填充矩形。它使用布尔值(onOff)来查看它是否被点击。现在,切换到 AppleDelegate ,我按如下方式实例化此NSView子类。
// AppDelegate.m
- (IBAction)create4Clicked:(id)sender {
NSInteger rowCount = 10;
NSInteger colCount = 10;
NSInteger k = 1;
for (NSInteger i2 = 0; i2 < rowCount; i2 ++) {
for (NSInteger i3 = 0; i3 < colCount; i3 ++) {
NSView *view = [[clickView alloc] initWithFrame:NSMakeRect(50+i2*10,50+i3*10,10,10)];
[view setIdentifier:[NSString stringWithFormat:@"%li",k]];
[view1 addSubview:view]; // view1 is NSView that's been created with Interface Builder
k++;
}
}
}
所以我现在在view1(NSView)上显示了100个方块。如果我点击任何方块,我会得到它的标识符。 (请参阅&#39; mouseDown。&#39;)现在,我需要弄清楚的是如何判断哪个方块有&#39; onOff&#39;设置为YES(或NO)。
感谢您的帮助。
答案 0 :(得分:0)
一个。首先关闭所有:
可能你是Cocoa和Objective-C的新手。
一个。你为什么不用按钮?
湾onOff显然是一个财产。为什么不使用声明的属性?
B中。致你的问:
您可以通过询问超级视图的子视图来检索具有特定状态的视图,然后使用谓词过滤它们:
NSPredicate *clickedPredicate = [NSPredicate predicateWithFormat:@"onOff == %d", YES];
NSArray* clickViews = [view1 subviews]; // Returns all subviews
clickViews = [clickViews filteredArrayUsingPredicate:clickedPredicate]; // On-views
但是你应该考虑将状态存储在视图之外。你的应用是什么?