2015-08-27 7 views
0

Я создал одно приложение, у меня есть один UIButton, созданный программно в файле UITableViewCell.Как вызвать IBAction в UITableView didSelectRowAtIndexPath

Ниже приведен код для этого.

//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, в котором я хочу использовать этот UIButton playBtnClick в didSelectRowAtIndexPath

Ниже приводится код, где я хочу использовать playBtnClick

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

ваш self.playBtnClick в внутри клетки или снаружи клетки –

+0

внутри клетки –

+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; 
+0

У меня есть отдельный файл для ячейки и отдельный файл для таблицы. так что это не работает для меня –

+0

в классе UITableViewCell.m вы можете добавить свою кнопку. это будет работать. – Jamil

+0

Я уже создал кнопку в своем TableViewCell, но я хочу использовать эту кнопку при щелчке, в таблице отображается 10 ячеек, поэтому кнопка 10 отображает меня хорошо, но когда я нажимаю один из них, она будет работать для определенных выбранных операций Rows –

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 = [[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); 
} 
0

FYI:

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

Вы не можете выполнять любые задачи по нажатию кнопки в указанном выше способе. Вышеупомянутый метод представляет собой метод делегата таблицы, и он может распознавать только краны на ячейках таблицы.

У вас должен быть пользовательский метод действий, который срабатывает при нажатии кнопки. Вы должны указать значение тега на кнопку, а в методе действий сравнить тег отправителя и выполнить требуемые задачи.