iOS-UITableView-处理cell上按钮事件(弹出警示框,页面跳转等)

一. 目的:

实现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
时间: 2024-12-20 21:18:09

iOS-UITableView-处理cell上按钮事件(弹出警示框,页面跳转等)的相关文章

js弹出提示框并跳转页面

1.提示框有两个选择项,点确定跳转,取消停留在原页面ScriptManager.RegisterStartupScript(Page, this.GetType(), "", "<script>if(confirm('请登录?')){location.href='login.aspx'};</script>", false); 2.提示框只有一个确定按钮,跳转到指定页面ScriptManager.RegisterStartupScript(p

【2017-05-21】WebForm跨页面传值取值、C#服务端跳转页面、 Button的OnClientClick属性、Js中getAttribute和超链接点击弹出警示框。

一.跨页面传值和取值: 1.QueryString - url传值,地址传值 优缺点:不占用服务器内存:保密性差,传递长度有限. 通过跳转页面路径进行传值,方式: href="地址?key=value&key=value"            用&可以实现传递多个值. 通过这种方式就把要传递的值传到要跳转的页面去了. 2.跨页面取值: 在跳转到的页面的C#代码服务端进行取值 用:  string value = Request["key"]; 二.

获取cell上按钮事件

原由:点击cell上的按钮,无法获取button对应的cell位置 //获取按钮上层控件,也就是cell本身 AccountCell *cell= (AccountCell *)[按钮名称 superview]; //获取该cell本身的位置 NSIndexPath *indexPath=[self.collectionView indexPathForCell:cell];

PHP弹出提示框并跳转到新页面即重定向到新页面

这两天写一个demo,需要用到提示并跳转,主要页面要求不高,觉得没必要使用AJAX,JS等,于是研究了下怎么在PHP提示并跳转. 开始先是用了下面这种: 代码如下: echo "<script> alert('sucess');parent.location.href='/user/index'; </script>"; alert里面是提示的消息,href是提示后跳转的页面. 后来想起TP框架里面有个redirect()重定向的方法,就去看了看. 不过TP自带

iOS 获取自定义cell上按钮所对应cell的indexPath.row的方法

在UITableView或UICollectionView的自定义cell中创建一button,在点击该按钮时知道该按钮所在的cell在UITableView或UICollectionView中的行数.就是cell的 indexPath.row,下面以UITableView为例: 有两种方法: -(IBAction):(id)sender { 1. 第一种方法,这个方便一点点,不用设置tag. NSLog(@"MyRow:%d",[self.table indexPathForCell

C# GridView Edit &amp; Delete, 点击Delete的时候弹出确认框

1. 使用GridView自带属性ShowEditButton和ShowDeleteButton,均设为True  <Columns> ... <asp:CommandField ShowEditButton="True" ShowDeleteButton="True"></asp:CommandField> </Columns> 则在GridView指定列的位置会显示Edit和Delete的LinkButton 2.

IOS开发中UIBarButtonItem上按钮切换或隐藏实现案例

IOS开发中UIBarButtonItem上按钮切换或隐藏案例实现案例是本文要介绍的内容,这个代码例子的背景是:导航条右侧有个 edit button,左侧是 back button 和 add button. AD:[线下活动]三大新锐HTML 5企业汇聚51CTO—大话移动前端技术 IOS开发中UIBarButtonItem上按钮切换或隐藏案例实现案例是本文要介绍的内容,这个代码例子的背景是:导航条右侧有个 edit button,左侧是 back button 和 add button.代

Siebel 找字段、下拉菜单设置值、弹出新页面、弹出选择框、设置默认值 、按钮代码

产品缺陷太多,跟用户交互不人性化.例如搜索新建客户功能,用户输入后会自动保存数据,一旦保存后一. 找字段1.简单 CTRL+Q CTRL+Q 服务请求编号----对应的表.字段.长度: 客户编码-----对应的表.字段.长度(弹出新页面):- 点击上面的pick Applet会弹出“选取客户”对话框 有JOIN就不用TABLE:require代表必填 字段有两个值----项目编号 下图确定只有projectNum有用 3.表单中的字段(不在list column中,而是在control) 二.下

xtraTabbedMdiManager的标题上右鍵弹出关闭窗体菜单

实现一个增值功能, 在xtraTabbedMdiManager组件TabPage标题上右鍵弹出关闭当前窗体的菜单. C# Code:private void xtraTabbedMdiManager1_MouseUp(object sender, MouseEventArgs e){   //点左键无效, 必须是点右键弹出菜单   if (e.Button != MouseButtons.Right) return;      BaseTabHitInfo hint = xtraTabbedMd