IOS UITableViewCell详解及按钮点击事件处理实例

2020-01-18 19:00:46王旭

IOS UITableViewCell详解及按钮点击事件处理

今天突然做项目的时候,又遇到处理自定义的UITableViewCell上按钮的点击事件问题。我知道有两种方式,可是突然想不起来之前是怎么做的了,好记性不如烂笔头,还是记录一下吧。

1、第一种方式给Button加上tag值

这里分为两种:一种是直接在原生的UITableViewCell上添加UIButton按钮,然后给UIButton设置tag值,然后在控制器里的方法里通过取数据,做界面跳转等。还是举个例子吧,省的回忆半天。


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
   
  static NSString *identifier = @"Cell"; 
   
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; 
  if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
  } 
   User *user = _users[indexPath.row]; 
  cell.user = user; 
  //拍照button 
  UIButton *photographButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
  photographButton.frame = CGRectMake(221 , 10, 100, 44); 
  [photographButton setImage:[UIImage imageNamed:@"camera.png"] forState:UIControlStateNormal]; 
  [photographButton addTarget:self action:@selector(photographButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
  photographButton.tag = indexPath.row; 
  [cell.contentView addSubview:photographButton]; 
   
  return cell; 
} 

然后在点击事件中取数据,加信息


- (void)photographButtonClicked:(UIButton *)sender{ 
   User *user = _users[sender.tag]; 
  PhotoPickerController *photoPicker = [[PhotoPickerController alloc] init]; 
  photoPicker.user = user; 
  [self.navigationController pushViewController:photoPicker animated:YES]; 
   
} 

以上两个方法都是在同一个控制器中。

2、自定义了UITableViewCell,那么就在UITableViewCell里添加一个代理方法。


#import <UIKit/UIKit.h> 
 
@protocol TermCellDelegate <NSObject> 
 
- (void)choseTerm:(UIButton *)button; 
 
@end 
 
@interface TermCell : UITableViewCell 
 
@property (retain, nonatomic) IBOutlet UIButton *checkButton; 
@property (retain, nonatomic) IBOutlet UILabel *termLabel; 
 
@property (assign, nonatomic) BOOL isChecked; 
@property (assign, nonatomic) id<TermCellDelegate> delegate; 
 
- (IBAction)checkAction:(UIButton *)sender; 
 
@end 
 
#import "TermCell.h" 
 
@implementation TermCell 
 
- (void)awakeFromNib 
{ 
  // Initialization code 
} 
 
- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
  [super setSelected:selected animated:animated]; 
 
  // Configure the view for the selected state 
} 
 
- (void)layoutSubviews 
{ 
  [super layoutSubviews]; 
  if (_isChecked) { 
    [_checkButton setBackgroundImage:[UIImage imageNamed:@"task_state_checked"] forState:UIControlStateNormal]; 
  } else { 
    [_checkButton setBackgroundImage:[UIImage imageNamed:@"task_state_unchecked"] forState:UIControlStateNormal]; 
  } 
} 
 
- (void)dealloc { 
  [_checkButton release]; 
  [_termLabel release]; 
  [super dealloc]; 
} 
 
- (IBAction)checkAction:(UIButton *)sender { 
  if ([_delegate respondsToSelector:@selector(choseTerm:)]) { 
    sender.tag = self.tag; 
    [_delegate choseTerm:sender]; 
  } 
} 
 
@end