iOS-UITableView-處理cell上按鈕事件(彈出警示框,頁面跳轉等)

一. 目的: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
相關文章
相關標籤/搜索