zoukankan      html  css  js  c++  java
  • 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内部发生了一些事情,想告诉控制器的时候

  • 相关阅读:
    LeetCode题解——冗余连接(并查集)——java实现
    两数之和的问题
    强引用、软引用、弱引用、虚引用——4中引用的理解
    手写死锁程序实例
    使用阻塞队列实现生产者消费者问题
    ABC三个线程交替打印10遍,要求A打印5次,B打印10次,C打印15次
    使用jstack查看线程情况解决cpu飙高问题
    ES 【elasticsearch】
    C# 正则
    领域驱动设计 浅析VO、DTO、DO、PO的概念、区别和用处等资料链接(草稿)
  • 原文地址:https://www.cnblogs.com/marshall-yin/p/4760027.html
Copyright © 2011-2022 走看看