action:@selector(showAlert :)如何在这个showAlert方法中传递参数?

时间:2009-10-02 09:02:31

标签: iphone ios objective-c uialertview

我正在为UITableViewCell添加自定义按钮。在该按钮的操作中,我想调用showAlert:函数,并希望在方法中传递单元格标签。

如何通过此showAlert方法传递参数:action:@selector(showAlert:)

3 个答案:

答案 0 :(得分:9)

如果您在Tableviewcell中使用Button,则必须为每个单元格的按钮添加标记值,并将方法addTarget设置为id作为参数。

示例代码:

您必须在cellForRowAtIndexPath方法中输入以下代码。

{

     // Set tag to each button
        cell.btn1.tag = indexPath.row; 
        [cell.btn1 setTitle:@"Select" forState:UIControlStateNormal];  // Set title 

     // Add Target with passing id like this
        [cell.btn1 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];    


     return cell;

}

-(void)btnClick:(id)sender
{

    UIButton* btn = (UIButton *) sender;

     // here btn is the selected button...
        NSLog(@"Button %d is selected",btn.tag); 


    // Show appropriate alert by tag values
}

答案 1 :(得分:2)

那是不可能的。您必须创建符合IBAction的方法

- (IBAction)buttonXYClicked:(id)sender;

在此方法中,您可以创建并调用UIAlertView。不要忘记将按钮与Interface Builder中的方法连接。

如果您想区分多个按钮(例如,每个表格单元格中有一个),您可以设置按钮的标记属性。然后检查sender.tag,从哪个按钮点击。

答案 2 :(得分:1)

杰伊的答案很棒,但如果你有多个部分,那么因为indexRow是local to a section,它将无法工作。

另一种方法,如果您在TableView中使用具有多个部分的按钮,则传递触摸事件。

在懒惰的加载器中声明按钮的位置:

- (UIButton *)awesomeButton
{
    if(_awesomeButton == nil)
    {
        _awesomeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [_awesomeButton addTarget:self.drugViewController action:@selector(buttonPressed:event:) forControlEvents:UIControlEventTouchUpInside];
    }

    return _awesomeButton;
}

这里的关键是将事件链接到选择器方法。您无法传递自己的参数,但可以传递事件。

按钮挂钩的功能:

- (void)buttonPressed:(id)sender event:(id)event
{
    NSSet *touches = [event allTouches];
    UITouch *touch = [touches anyObject];

    CGPoint currentTouchPosition = [touch locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];

    NSLog(@"Button %d was pressed in section %d",indexPath.row, indexPath.section);
}

这里的关键是函数indexPathForRowAtPoint。这是UITableView中的一个漂亮的函数,可以在任何时候为您提供indexPath。同样重要的是函数locationInView,因为您需要在tableView的上下文中进行触摸,以便它可以精确定位特定的indexPath。

这将允许您在具有多个部分的表中知道它是哪个按钮。