Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 从循环中识别UIButton_Iphone_Loops_Uibutton - Fatal编程技术网

Iphone 从循环中识别UIButton

Iphone 从循环中识别UIButton,iphone,loops,uibutton,Iphone,Loops,Uibutton,我看到一个问题/答案的结果与我正在寻找的类似,但讨论的代码比我现在看到的要复杂得多 我使用for()循环从数组中创建一组按钮。然后,我有一个动作,但我无法识别按钮。因此: NSArray *numbers = [NSArray arrayWithOjbects:@"1", "2", "3", nil]; for (int i = 0; i < [numbers count]; i++) { button = [UIButton buttonWithType:UIButtonTy

我看到一个问题/答案的结果与我正在寻找的类似,但讨论的代码比我现在看到的要复杂得多

我使用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);

   }
但是,我只得到数组的最后一个成员(3),而不考虑按下按钮。我想我错过了-(void)识别:(id)发送者。。。我应该知道。。。但我现在完全不明白


/Vlad

循环的每次迭代都会分配给
按钮
变量。当循环退出时,它将只保留您分配给它的最后一个值。
按钮
变量似乎是一个实例变量-它对于类的实例而不是按钮是唯一的

NSLog (@"%@", ((UIButton *)sender).titleLabel.text);
执行所需操作的便捷方法是访问iOS提供给方法的
发送方
变量。这将保存产生问题事件的对象,在本例中为按钮

NSLog (@"%@", ((UIButton *)sender).titleLabel.text);

还要注意,以这种方式记录文本值是不可接受的。如果它包含一个格式字符串(如
%@
),它将需要一个进一步的参数,但它无法获取该参数,并将崩溃这可能是一个安全漏洞。如果要记录字符串变量,请使用
%@
记录它,如上所述。Xcode应该已经在警告您了。不要忽略警告。

是否将其添加到视图中的某个位置?有一个属性
标记
,用于标识元素。在循环结束时,您应该稍后使用:[board addSubview:button]执行类似于
[self.view addSubview:button]
的操作。我之前忘记添加了,因为在它和代码的其余部分之间是对position的重新计算。非常感谢,并注意到了NSLog的草率使用。