一. 目的:ide
實現UITableViewCell上按鈕點擊事件能夠進行頁面跳轉.atom
二. 實現方法:spa
1. 用協議的方式的實現.代理
2. 須要自定義UITableViewCell.code
三. 代碼部分.orm
cell.h中blog
#import <UIKit/UIKit.h> @protocol SevenProtocolDelegate <NSObject> - (void)sevenProrocolMethod:(UIViewController *)viewController and:(NSInteger)cellRow; @end @interface SevenCell : UITableViewCell @property (nonatomic, weak) id<SevenProtocolDelegate> customDelegate; @property (nonatomic, strong) UIViewController * viewController; @property (nonatomic, assign) NSInteger cellRow; @end
cell.m中生命週期
#import "SevenCell.h" #import "Masonry.h" @interface SevenCell () @property (nonatomic, strong) UIView * bgView; @property (nonatomic, strong) UIButton * button; @end @implementation SevenCell - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { [self addSubviews]; } return self; } - (void)addSubviews { [self addSubview:self.bgView]; [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(self).with.insets(UIEdgeInsetsMake(0, 0, 10, 0)); }]; [self.bgView addSubview:self.button]; [self.button mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self.bgView).with.offset(10); make.top.mas_equalTo(self.bgView).with.offset(10); make.size.mas_equalTo(CGSizeMake(200, 40)); }]; } - (void)buttonClicked { if (self.customDelegate != nil && [self.customDelegate respondsToSelector:@selector(sevenProrocolMethod:and:)]) { [self.customDelegate sevenProrocolMethod:self.viewController and:self.cellRow]; } } #pragma mark - setter & getter - (UIView *)bgView { if (!_bgView) { self.bgView = [[UIView alloc] init]; self.bgView.backgroundColor = [UIColor whiteColor]; } return _bgView; } - (UIButton *)button { if (!_button) { self.button = [UIButton buttonWithType:UIButtonTypeCustom]; self.button.layer.masksToBounds = YES; self.button.layer.cornerRadius = 20.0f; self.button.backgroundColor = [UIColor orangeColor]; self.button.titleLabel.font = [UIFont boldSystemFontOfSize:14.0f]; [self.button setTitle:@"button點擊事件跳轉下一個頁面" forState:UIControlStateNormal]; [self.button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [self.button addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside]; } return _button; } @end
controller.m中事件
#import "SevenViewController.h" #import "SevenCell.h" #import "Seven_oneViewController.h" #import "Masonry.h" @interface SevenViewController () <UITableViewDelegate,UITableViewDataSource,SevenProtocolDelegate> @property (nonatomic, strong) UITableView * tableView; @end @implementation SevenViewController #pragma mark - 生命週期 #pragma mark viewDidLoad - (void)viewDidLoad { [super viewDidLoad]; [self basicSetting]; [self addTableView]; } #pragma mark - 系統代理 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 5; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 80; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString * identifier = @"cell"; SevenCell * cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[SevenCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } cell.customDelegate = self; cell.viewController = self; cell.cellRow = indexPath.row; return cell; } #pragma mark - 點擊事件 #pragma mark - 實現方法 #pragma mark - 自定義協議 - (void)sevenProrocolMethod:(UIViewController *)viewController and:(NSInteger)cellRow { // 能夠經過 cellRow 區分哪一個cell上的button跳轉對應的頁面 if (cellRow == 0 || cellRow == 1) { Seven_oneViewController * seven_one = [[Seven_oneViewController alloc] init]; [self.navigationController pushViewController:seven_one animated:YES]; } } #pragma mark 基本設置 - (void)basicSetting { self.title = @"cell上button頁面跳轉"; } - (void)addTableView { [self.view addSubview:self.tableView]; [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(self.view).with.insets(UIEdgeInsetsMake(10, 0, 0, 0)); }]; } #pragma mark - setter & getter - (UITableView *)tableView { if (!_tableView) { self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; self.tableView.delegate = self; self.tableView.dataSource = self; } return _tableView; } @end