我试图循环并以编程方式制作256个NSButtons(16x16)的网格。我到目前为止的代码如下。这是我的Mac应用程序的Objective-C。因此,我正在记录以查看单击按钮时获得的标记,但每次都会返回相同的标记。我希望它能让每个按钮从左到右,从上到下依次为1-256。这段代码成功地将它们加载到我的视图中,但标签是错误的。希望你能帮忙,谢谢。
#define N_ROWS 16
#define N_COLS 16
int btnSpaceDifference = 1;
int btnSpacing = N_ROWS + btnSpaceDifference;
for (int j = 0; j < N_ROWS; j++) {
for (int i = 0; i < N_COLS; i++) {
paintPixel = [[[NSButton alloc] initWithFrame:NSMakeRect(10 + (i * btnSpacing), 10 + (j * btnSpacing), 16, 16)] autorelease];
[paintPixel setTitle:@""];
[paintPixel setBezelStyle:NSBorderlessWindowMask];
[paintPixel setTag:j + i * N_ROWS + 1];
[paintPixel setAction:@selector(btnPaintAction:)];
[[[box.tabViewItems objectAtIndex:0]view] addSubview:paintPixel];
}
}
-(void)btnPaintAction:(id)sender{
NSLog(@"%ld", paintPixel.tag);
}
答案 0 :(得分:4)
为什么不使用NSMatrix
而不是自己制作所有这些按钮?这就是完美的。
答案 1 :(得分:1)
使用增量变量
调用setTag
int TagVal = 1;
for (int j = 0; j < N_ROWS; j++) {
....
[paintPixel setTag:TagVal++];
....
}
然后修改你的btnPaintAction:
UIButton *button = (UIButton *)sender;
NSLog(@"%ld", button.tag);
答案 2 :(得分:1)
不确定如何编译,你可能在别处定义 paintPixel 。但您需要更改 btnPaintAction :
-(void)btnPaintAction:(id)sender {
NSLog(@"%ld", paintPixel.tag);
}
对于这样的事情:
-(void)btnPaintAction:(id)sender {
NSButton * myButton = (NSButton *) sender;
NSLog(@"%ld", myButton.tag);
}
答案 3 :(得分:1)
每次返回相同的标记,因为您的操作是指您的(显然)成员变量paintPixel
。请改为使用sender
参数。
NSLog(@"%ld", ((NSButton *)sender).tag);
答案 4 :(得分:0)
这是旧帖,但我看不到正确答案,因此我的补充。
Q值。 “我希望它能让每个按钮从左到右,从上到下依次为1-256。”
Kevin处于良好的轨道上,但还需要进行一次改动:
paintPixel = [[[NSButton alloc] initWithFrame:NSMakeRect(10 + (i * btnSpacing), 10 - (j * btnSpacing), 16, 16)] autorelease];
因此,减号( - )而不是加号(+)会导致从上到下的编号。