晚上好!
我在视图中动态添加了一些UIButtons,当然我有一个处理按钮事件的IBAction。
问题是:如果我知道的唯一的东西是(id)发送者和按钮数组,我如何检测按下哪个按钮?
按钮永远不会相同,每个按钮都有不同的行为。当我想使用静态按钮并通过IB连接它时我会使用以下内容:
-(IBAction)doSomething:(id)sender
{
if(sender == button1)
dosomething;
if(sender == button2)
dosomething else;
if(sender == button3)
dosomething3;
}
在我的情况下,这不起作用,因为没有button1,button2,button3,但是MutableArray的按钮与它们分配的名称相同。按钮!
我尝试使用上面的方法,但没有成功,我也尝试获取按钮的标签,但我没有什么可比较的!
我真的很感谢你的帮助。
真诚
L_Sonic
PS Dynamicaly意味着我在运行时间内随机创建按钮,如此
-(void)configActionSheetView
{
buttonView = [[UIView alloc]initWithFrame:CGRectMake(0.0,460, 60, 480)];
[buttonView setBackgroundColor:[UIColor blackColor]];
[buttonView setAlpha:0.6];
for (int i = 0 ;i<[buffButtons count];i++)
{
UIButton *customButton = [buffButtons objectAtIndex:i];
customButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
//UILabel *customLabel = [[UILabel alloc]init];
//[customButton setTag:(i)+11];
[customButton addTarget:self action:@selector(activateBuffEffect:) forControlEvents:UIControlEventTouchUpInside];
[customButton setAlpha:1.0];
customButton.frame = CGRectMake(8.0, 5+(50*i), 44.0, 44.0);
[customButton setTitle:nil forState:UIControlStateNormal];
buttonView.frame = CGRectMake(0, 460, 60, 50+(44*(i+1)));
[buttonView addSubview:customButton];
}
}
这是在函数内部并在运行时调用。 buffButtons是一个mutableArray,其中包含在运行时填充的按钮。 我需要这样的解决方案我无法为每个按钮获得不同的事件处理方法。
答案 0 :(得分:2)
当你“动态添加”时,我认为你的意思是它们是从一些代码创建的。由于所有按钮都是不同的东西,你知道某个按钮应该做什么,为什么不为不同的按钮添加不同的动作呢?
UIButton *myCreatedButton = [[UIButton alloc] init];
[myCreatedButton addTarget:self
action:@selector(doSomething:)
forControlEvents:UIControlEventTouchUpInside];
UIButton *myOtherCreatedButton = [[UIButton alloc] init];
[myOtherCreatedButton addTarget:self
action:@selector(doSomethingElse:)
forControlEvents:UIControlEventTouchUpInside];
在上面的代码中,target(设置为self)是找到要运行的方法的类,action是要运行的方法,controlEvent是导致该方法运行的方法。 / p>
如果你这样做,你会用不同的方法分割代码(你不需要在标题中指定它们):
-(void)doSomething:(id)sender {
// do somthing here ...
}
-(void)doSomethingElse:(id)sender {
// do somthing else here ...
}
这样您就不需要知道按下了什么按钮,因为无论如何都会调用正确的代码。此外,如果您需要更改某些按钮的代码,它会更清晰。
答案 1 :(得分:0)
-(IBAction)buttonTapped:(id)sender {
UIButton *btn = (UIButton *)sender;
NSLog(@"tapped: %@", btn.titleLabel.text);
[self anotherIBAction:sender];
}
现在我可以从btn获取标签:D 你呢!
答案 2 :(得分:0)
为什么不在按钮上添加标签,然后在选择器功能中从(id)发送器获取标签号?