我看到一个问题/答案的结果与我正在寻找的结果类似,但所讨论的代码比我现在复杂得多。
我使用for()循环从数组中创建一堆按钮。然后,我有一个动作,但我无法识别按钮。所以:
NSArray *numbers = [NSArray arrayWithOjbects:@"1", "2", "3", nil];
for (int i = 0; i < [numbers count]; i++) {
button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(recognize:) forControlEvents:UIControlEventTouchDown];
[button setTitle:[numbers objectAtIndex:i] forState:UIControlStateNormal];
button.frame = CGRectMake(x, y, w, l);
}
然后:
-(void) recognize:(id)sender {
NSLog (button.titleLabel.text);
}
但是,无论按下按钮,我只获得数组(3)的最后一个成员。我想我错过了一步 - (无效)认识:(id)发件人......我应该知道......但它现在完全逃脱了我。
/维拉德
答案 0 :(得分:0)
循环的每次迭代都会分配给button
变量。退出循环时,它将只保留您分配给它的最后一个值。 button
变量似乎是一个实例变量 - 它对于类的实例是唯一的,而不是按钮。
执行所需操作的便捷方法是访问iOS提供给您的方法的sender
变量。这包含产生相关事件的对象,在本例中为按钮。
NSLog (@"%@", ((UIButton *)sender).titleLabel.text);
另请注意,以这种方式记录文本值是不可接受的。如果它包含一个格式字符串(例如%@
),它将期望一个它没有得到的进一步的参数,并且会崩溃。 这可能是一个安全漏洞。当您有一个要记录的字符串变量时,请使用%@
进行记录,如上所述。 Xcode应该已经警告过你了。不要忽视警告。