标签:
不利用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内部发生了一些事情,想告诉控制器的时候
iOS基础-高级视图-UITableView--实例:app管理
标签:
原文地址:http://www.cnblogs.com/marshall-yin/p/4760027.html