• iOS基础-高级视图-UITableView--实例:app管理


    不利用xib而是利用storyboard里的默认动态cell来描述自定义cell
    一、在第三个数据源方法中加载cell

    {
    MJAppCell *cell = [tableView dequeueReusableCellWithIdentifier:@"app"];
    //将模型数据传给cell的时候会调用set方法,在set方法中覆盖按钮的数据和状态即可
    cell.app = self.apps[indexPath.row]; 
    return cell;
    }

    PS:一个TableView可以备份多种类型的cell,到时候只需要根据不同标识加载cell即可
    二、在MJAppCell.h中添加模型数据属性并重写set方法

    //这个MJApp是事先准备好直接拖过来的,里面有app的icon,name,size,download属性。 
    @property(nonatomic,strong)MJApp *app;
    //在set方法中将app的这些属性赋值给cell的相应控件。
    -(void)setApp:(MJApp *)app
    {
    _app = app;
    self.iconView.image = [UIImage imageNamed:app.icon];
    self.nameView.text = app.name;
    self.introView.text = [NSString stringWithFormat:@" 大小: %@ | 下载量:% 
    @",app.size,app.download];
    }

    三、点击下载按钮后显示已下载,并且按钮不能再被点击
    1.将Disabled时的文字设置为已下载
    2.在MJApp模型中添加一条属性
    @property(nonatomic,assign,getter = isDownloaded)BOOL downloaded;
    3.监听下载按钮并实现方法

    //点击了下载按钮
    -(IBAction)downloadClick:(UIButton *)btn{
    //让按钮失效
    self.app.downloaded = YES;
    btn.enabled = NO;
    
    //2.通知代理
    }

    4.拿到下载按钮,在set方法中覆盖按钮的状态

    -(void)setApp:(MJApp *)app
    {
       ......
      // 覆盖按钮的状态
      self.downloadView.enabled = (self.app.isDownloaded == NO);
    }

    5.添加一个下载成功的提示
    1>定义协议并遵守协议

    @protocol MJAppCellDelegate <NSObject>
    @optional
    -(void)appCellDidClickedDownloadBtn:(MJAppCell *)cell;
    @end
    @property (nonatomic,weak) id<MJAppCellDelegate> delegate;

    2>在下载按钮的方法中通知代理按钮被点击了

    -(IBAction)downloadClick:(UIButton *)btn
    {
       ....
      //2.通知代理
      if([self.delegate respondsToSelector:@selector 
      (appCellDidClickedDownloadBtn:)]){
      [self.delegate appCellDidClickedDownloadBtn:self];
       } 
    }

    3>在第三个数据源方法中将控制器设置为代理,并让控制器遵守代理协议
    4>实现cell 的代理方法

    PS:什么时候用代理呢?
    当一个View内部发生了一些事情,想告诉控制器的时候

  • 相关阅读:
    IO
    File
    jdbc
    HashMap
    网络通信
    lambda
    Queue
    反射
    Stack
    AC自动机题目选讲
  • 原文地址:https://www.cnblogs.com/marshall-yin/p/4760027.html
Copyright © 2020-2023  润新知