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.拿到下载按钮(Outlet),在set方法中覆盖按钮的状态
-(void)setApp:(MJApp *)app
{
......
// 覆盖按钮的状态
self.downloadView.enabled = (self.app.isDownloaded == NO);
}
5.添加一个下载成功的提示
1>定义协议
@protocol MJAppCellDelegate <NSObject>
@optional
-(void)appCellDidClickedDownloadBtn:(MJAppCell *)cell;
@end
2>遵守协议
@property (nonatomic,weak) id<MJAppCellDelegate> delegate;
3>在下载按钮的方法中通知代理按钮被点击了
-(IBAction)downloadClick:(UIButton *)btn{
....
//2.通知代理
if([self.delegate respondsToSelector:@selector

(appCellDidClickedDownloadBtn:)]){
[self.delegate appCellDidClickedDownloadBtn:self];
}
}
4>在第三个数据源方法中将控制器设置为代理,并让控制器遵守代理协议
5>实现cell 的代理方法

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

时间: 2024-08-30 13:10:28

iOS基础-高级视图-UITableView--实例:app管理的相关文章

iOS基础-高级视图-UITableView--实例:QQ好友列表

事先已准备好plist文件,结构如下1.Root为Array.2.里面有十一个字典(每个字典为一个分组)3.每个分组里有friends,name,online三个属性4.friends属性里有若干字典(每个字典代表一个好友)5.每个好友字典里有4个属性,name,icon,intro和vip6.需要两个模型,分组模型和其里面的好友模型一.加载模型数据1.新建一个好友模型MJFriend,添加4个属性,提供加载模型数据的方法并实现@property(nonatomic,copy)NSString

iOS:获取视图控制器实例的方法

获取视图控制器实例,可以使用其公开的成员变量的值,而不是重新开辟一块内存,与原先的实例并不只想一块内存区域 实例方法 - (RootViewController *)<span style="font-family: Arial, Helvetica, sans-serif;">rootViewController</span> { UIResponder *next = self.nextResponder; do { if ([next isKindOfCl

[iOS基础控件 - 4.1] APP列表

需求 1.以N宫格的形式展示应用信息 2.APP信息包括图标.名字.下载按钮 3.使用尽可能少的代码,从plist读取app信息,计算每个app图标的位置尺寸信息 A.思路 1.UI布局:N宫格 2.事件监听 3.动态添加 (by plist) 4.整体封装,组合每个应用信息,使用View的层级包装帮助布局 B.实现 (使用纯代码方式) 1 // 2 // ViewController.m 3 // 01-应用管理 4 // 5 // Created by hellovoidworld on 1

iOS基础-自定义视图、视图控制器

自定义视图 例如,登陆页面中,左边label,右边textField.自定义 @interface LTView : UIView @property (nonatomic,retain) UILabel *label; @property (nonatomic,retain) UITextField *textField; - (instancetype)initWithFrame:(CGRect)frame text:(NSString *)text placeHolder:(NSStrin

[iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表&quot;练习)

A.概述 在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能 1.按钮点击后,显示为“已下载”,并且不可以再按 2.在屏幕中间弹出一个消息框,通知消息“xx已经被安装”,慢慢消失 3.消息框样式为圆角半透明 B.不使用代理模式,使用app空间组和主View之间的父子View关系 1.在主View中创建一个消息框 主View控制器:ViewController.m 1 // 创建下载成功消息框 2 CGFloat labelWid

iOS基础篇(十三)——UITableView(一)重用机制

UITableView是app开发中常用到的控件,功能很强大,常用于数据的显示.在学习UITableView使用之前,我们先简单了解一下: 1.UITableView的重用机制 UITableView最核心的思想就是UITableViewCell的重用机制,对于一个UITableView而言,可能需要显示成百上千个Cell,如果每个cell都单独创建的话,会消耗很大的内存,为了避免这种情况,重用机制就诞生了. UITableView的重用机制的实现关键在于下面这个的函数:UITableViewC

IOS开发之表视图(UITableView)

IOS开发之表视图(UITableView)的基本介绍(一) (一):UITableView的基本概念 1.在IOS开发中,表视图的应用十分广泛和普及.因此掌握表视图的用法显得非常重要.一般情况下对于数据的展示 我们都会选择表视图,比如通讯录和一些数据列表. 2.我们可以选择创建表视图也可以创建表视图控制器. (二)UITableView基本样式如下(1:UITableViewStylePlain(普通表视图),2:UITableViewStyleGroup(分组表视图)): (三)UITabl

iOS基础——通过案例学知识之UITableView(上)

iOS基础--通过案例学知识之UITableView(上) 对于UITableView的知识点特别多,因为它是iOS用得最多控件之一,我会尽我最大努力和语言的组织,将所有知识点介绍到位,今天要实现的效果图 吐槽 与Android对比,可以说跟ListView的实现几乎一样,跟RecyclerView一模一样 Android写起来似乎比iOS复杂一点,因为iOS大部分都被封装好了,这一点iOS做得好 对于iOS的方法的命名只能说又长又臭 知识点包括 UITableView的UITableViewD

iOS网络高级编程:iPhone和iPad的企业应用开发之错误处理

本章内容 ●    iOS应用中的网络错误源 ●    检测网络的可达性 ●    错误处理的经验法则 ●    处理网络错误的设计模式 到目前为止,我们所介绍的iPhone与其他系统的网络交互都是基于一切正常这个假设.本章将会放弃这个假设,并深入探究网络的真实世界.在真实世界中,事情是会出错的,有时可能是非常严重的错误:手机进入与离开网络.包丢掉或是延迟:网络基础设施出错:偶尔用户还会出错.如果一切正常,那么编写iOS应用就会简单不少,不过遗憾的是现实并非如此.本章将会探讨导致网络操作失败的几