如何在UITableView didSelectRowAtIndexPath中调用IBAction

时间:2015-08-27 11:56:46

标签: ios objective-c uibutton

我创建了一个应用程序,因为我在UITableViewCell文件中以编程方式创建了一个UIButton。

以下是代码。

//UITableViewCell.m
//VIDEO DISPLAY BUTTON VIEW 

self.playBtnClick = [[UIButton alloc]initWithFrame:CGRectMake(140, 130, 50, 50)];
self.playBtnClick.clipsToBounds = YES;
[self.playBtnClick setBackgroundImage:[UIImage imageNamed:@"play2.png"] forState:UIControlStateNormal];
[self addSubview:self.playBtnClick]; 

我有UITableViewController我想在didSelectRowAtIndexPath中使用这个UIButton playBtnClick

以下是我想使用playBtnClick

的代码
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
   //Here I want to perform someTask when i pressed plyBtnClick button
 }

3 个答案:

答案 0 :(得分:0)

你可以这样做:

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(nullable NSString *)reuseIdentifier withTag:(long)buttonTag{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    // Initialization code
    NSLog(@"tag:%ld",buttonTag);

    UIButton *playBtnClick = [[UIButton alloc]initWithFrame:CGRectMake(50,0, 20, 25)];
    playBtnClick.clipsToBounds = YES;
    playBtnClick.backgroundColor = [UIColor grayColor];
    [playBtnClick addTarget:self action:@selector(playBtnClick:) forControlEvents:UIControlEventTouchUpInside];
    [playBtnClick setBackgroundImage:[UIImage imageNamed:@"play2.png"] forState:UIControlStateNormal];
    playBtnClick.tag = buttonTag;
    [self addSubview:playBtnClick];
}
return self;

}

-(void)playBtnClick:(UIButton*)button
{
    NSLog(@"cell index:%d",(int)button.tag);
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *CellIdentifier = @"Cell";
    TableViewCell *cell = [[TableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    return cell;
}

这样打电话

TableViewCell *cell = [[TableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier withTag:indexPath.row];

//不要忘记添加这个UITableViewCell.h文件

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(nullable NSString *)reuseIdentifier withTag:(long)buttonTag;

答案 1 :(得分:0)

在CustomTableViewCell.h中

@protocol CellSelectedDelegate

- (void)CellChecked:(BOOL)value andCell:(UITableViewCell *)cell ;

@end

@interface TreeViewCell : UITableViewCell

@property (nonatomic, assign) id <CellSelectedDelegate> delegate;

@end

在CustomTableViewCell.m

你在哪里创建btn

 btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
 btn.userInteractionEnabled = YES;
 [btn addTarget:self action:@selector(clickme:) forControlEvents:UIControlEventTouchUpInside];
 [self addSubview:btn];
 btn.delegate=self;

然后在CustomTableViewCell.m中添加函数

-(void)clickme:(UIButton *)sender
    {
       [delegate Checked:NO];   
    }

在你的UITableViewController.h

@interface tableView : UITableView <CellSelectedDelegate,UITableViewDataSource,UITableViewDelegate>

在你的UITableView.m

-(void)CellChecked:(BOOL)value andCell:(UITableViewCell *)cell
{
   NSLog(@"%@%@",value,cell);
}

答案 2 :(得分:0)

仅供参考:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 //Here I want to perform someTask when i pressed plyBtnClick button
 }

您无法在上述方法中单击按钮执行任何任务。上面的方法是一个表委托方法,它只能识别表格单元格上的点击。

您应该有一个自定义操作按钮方法,当您点按按钮时会触发该方法。您应该将标记值赋予按钮,并在操作方法中比较发件人标记并执行所需的任务。