iOS_满聪

想要源码的朋友,可以留下QQ邮箱.
  博客园  :: 新随笔  :: 管理

一. 目的:

实现UITableViewCell上按钮点击事件可以进行页面跳转.

二. 实现方法:

    1. 用协议的方式的实现.

    2. 需要自定义UITableViewCell.

三. 代码部分.

cell.h中

复制代码
#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
复制代码

 

编辑推荐:
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
点击右上角即可分享
微信分享提示