虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > IOS编程/Objective-C > IOS UITableViewCell详解及按钮点击事件处理实例

IOS UITableViewCell详解及按钮点击事件处理实例
类别:IOS编程/Objective-C   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了IOS UITableViewCell详解及按钮点击事件处理实例的相关资料,这里附有示例代码,大家可以看下如何实现按键点击事件,需要的朋友可以参考下

IOS UITableViewCell详解及按钮点击事件处理

今天突然做项目的时候,又遇到处理自定义的UITableViewCell上按钮的点击事件问题。我知道有两种方式,可是突然想不起来之前是怎么做的了,好记性不如烂笔头,还是记录一下吧。

1、第一种方式给Button加上tag值

这里分为两种:一种是直接在原生的UITableViewCell上添加UIButton按钮,然后给UIButton设置tag值,然后在控制器里的方法里通过取数据,做界面跳转等。还是举个例子吧,省的回忆半天。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *identifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    User *user = _users[indexPath.row];
    cell.user = user;
    //拍照button UIButton *photographButton = [UIButton buttonWithType:UIButtonTypeCustom];
    photographButton.frame = CGRectMake(221 , 10, 100, 44);
    [photographButton setImage:[UIImage imageNamed:@"camera.png"] forState:UIControlStateNormal];
    [photographButton addTarget:self action:@selector(photographButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
    photographButton.tag = indexPath.row;
    [cell.contentView addSubview:photographButton];
    return cell;
    }

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

    - (void)photographButtonClicked:(UIButton *)sender{
    User *user = _users[sender.tag];
    PhotoPickerController *photoPicker = [[PhotoPickerController alloc] init];
    photoPicker.user = user;
    [self.navigationController pushViewController:photoPicker animated:YES];
    }

以上两个方法都是在同一个控制器中。

2、自定义了UITableViewCell,那么就在UITableViewCell里添加一个代理方法。

    #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 nil];
    [alertView show];
    }

当然,这里也可以做界面跳转,取数据依然用button的tag值。

补充:这里还可以在代理方法中将cell本身传回去,这样不用从数组取数据,直接利用cell的数据对象,更简单吆。

3、是直接在自定义的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;
    }

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

    - (void)setWeiboModel:(WeiboModel *)weiboModel {
    if (_weiboModel != weiboModel) {
    [_weiboModel release];
    _weiboModel = [weiboModel retain];
    }
    __block WeiboCell *this = self;
    _userImage.touchBlock = ^{
    NSString *nickName = this.weiboModel.user.screen_name;
    UserViewController *userCtrl = [[UserViewController alloc] init];
    userCtrl.userName = nickName;
    [this.viewController.navigationController pushViewController:userCtrl animated:YES];
    [userCtrl release];
    }
    ;
    }

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关热词搜索: IOS UITableViewCell IOS UITableViewCell