UITableViewCell上的按钮点击事件处理

2016-11-26  本文已影响353人  王小王_2016

UITableViewCell上的按钮点击事件处理,有需要的朋友可以参考下。
今天突然做项目的时候,又遇到处理自定义的UITableViewCell上按钮的点击事件问题。我知道有两种方式,可是突然想不起来之前是怎么做的了,好记性不如烂笔头,还是记录一下吧。
1、第一种方式给Button加上tag值
这里分为两种:一种是直接在原生的UITableViewCell上添加UIButton按钮,然后给UIButton设置tag值,然后在控制器里的方法里通过取数据,做界面跳转等。还是举个例子吧,省的回忆半天。

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

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

然后再控制器中实现Cell的代理方法即可

pragma mark - TermCellDelegate- (void)choseTerm:(UIButton *)button{ _clickIndex = button.tag; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"确定修改学期吗?" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; [alertView show];}

当然,这里也可以做界面跳转,取数据依然用button的tag值。
第二种,是直接在自定义的Cell里面跳转,这种耦合性比较强。思路先是找到button的父控制器,然后做界面跳转或者其他操作。有这样一个工具方法

import "UIView+Additions.h"@implementation UIView (Additions)- (UIViewController *)viewController{ UIResponder *next = [self nextResponder]; do { if ([next isKindOfClass:[UIViewController class]]) { return (UIViewController *)next; } next = [next nextResponder]; } while (next != nil); return nil;}

头文件就不写了,很简单的扩展。

这里是给Cell赋值model,然后点击事件是用Block实现的

上一篇 下一篇

猜你喜欢

热点阅读