IBAction与动态添加的UI按钮一起使用

时间:2011-02-17 21:38:12

标签: iphone uibutton

晚上好!

我在视图中动态添加了一些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,其中包含在运行时填充的按钮。 我需要这样的解决方案我无法为每个按钮获得不同的事件处理方法。

3 个答案:

答案 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)发送器获取标签号?