[iOS基础控件 - 6.6] 展示团购数据 自定义TableViewCell

A.需求

1.头部广告

2.自定义cell:含有图片、名称、购买数量、价格

3.使用xib设计自定义cell,自定义cell继承自UITableViewCell

4.尾部“加载更多按钮”,以及其被点击之后的数据加载刷新、动画效果

B.实现

1.使用MVC

M:团购Model

V:总View、cell的View(包含类和界面)

C:ViewController

2.分类管理代码文件

3.尾部footerView “加载更多"功能

1     // 设置尾部控件
2     self.tableView.tableFooterView = footerView;

footerView设置的按钮自动宽度为tableView宽度,只能设置高度;x和y也不能设置。

要自定义按钮的的,使用xib进行自定义footerView嵌套

(1)使用button, 设计一个“加载更多”按钮

(2)加上等待图标

—>如何利用xib封装一个View:

  • 新建xib描述view的结构
  • 新建一个继承UIView的类(取决于xib根对象的class)
  • 新建类名,和xib保持一致
    @interface FooterRefreshView : UIView
  • 设置xib控件的class,连线
  • 在自定义class中定义xib的加载类方法(屏蔽xib加载过程)

     1 /** 初始化方法 */
     2 + (instancetype) footerRrefreshViewWithDelegate:(id<FooterRefreshViewDelegate>) delegate {
     3     FooterRefreshView *footerRefreshView = [[[NSBundle mainBundle] loadNibNamed:@"FooterRefreshView" owner:nil options:nil] lastObject];
     4
     5     if (nil != delegate) {
     6         footerRefreshView.delegate = delegate;
     7     }
     8
     9     return footerRefreshView;
    10 }
  • class持有controller引用,发送消息给controller刷新数据
    下面使用代理模式

—>改进:使用代理设计模式

  • 自定义view的class持有controller的引用,耦合性强 —>使用代理
  • 协议命名规范:控件类名+Delegate
  • 代理方法普遍都是@optional
  • 代理对象遵守代理协议,实现代理协议里面的方法
  • 在需要的地方调用代理方法,给代理发送消息
 1 FooterRefreshView.h
 2 #import <UIKit/UIKit.h>
 3
 4 @class FooterRefreshView;
 5
 6 // 定义delegate协议
 7 @protocol FooterRefreshViewDelegate <NSObject>
 8
 9 @optional
10 - (void) footerRefreshViewClickedFooterRefreshButton:(FooterRefreshView *) footerRefreshView;
11
12 @end
13
14 @interface FooterRefreshView : UIView
15
16 + (instancetype) footerRrefreshViewWithDelegate:(id<FooterRefreshViewDelegate>) delegate;
17
18 @end

4.xib中创建的view初始化完毕之后不会调用class中的init方法,而是调用awakeFromNib方法

FooterRefreshView.h

1 // xib控件的初始化调用方法
2 - (void)awakeFromNib {
3     self.loadingImage.hidden = YES;
4 }

5.分割线

其实就是高度为1的UIView

6.自定义cell

(1).自定义cell的子控件都要放到contentView里面

默认就是会放到contentView中

(2)创建继承自UITableViewCell的类

@interface GroupPurchaseCell : UITableViewCell

(3)创建xib文件描述cell的界面

(4)指定view的class,对控件进行连线

(5)在cell类中,定义一个model成员,用来存储这个cell的数据

1 /** 自定初始化的类方法,传入model数据 */
2 + (instancetype) groupPurchaseCellWithGroupPurchase:(GroupPurchase *) groupPurchase;

(6)创建初始化方法,使用model数据作为传入参数

 1 /** 自定初始化的类方法,传入model数据 */
 2 + (instancetype) groupPurchaseCellWithGroupPurchase:(GroupPurchase *) groupPurchase {
 3     GroupPurchaseCell *cell = [[[NSBundle mainBundle] loadNibNamed:@"GroupPurchaseCell" owner:nil options:nil] lastObject];
 4
 5     // 加载model中的数据,初始化界面
 6     cell.groupPurchase = groupPurchase;
 7
 8     return cell;
 9 }
10
11 /** 没有model数据的空cell */
12 + (instancetype)groupPurchaseCell {
13     return [self groupPurchaseCellWithGroupPurchase:nil];
14 }

(7)传入model数据的同时,加载数据到view上面

 1 /** 加载Model数据,初始化界面 */
 2 - (void) setGroupPurchase:(GroupPurchase *) groupPurchase {
 3     if (nil != groupPurchase) {
 4         self.titleLabel.text = groupPurchase.title;
 5         self.iconImageView.image = [UIImage imageNamed:groupPurchase.icon];
 6         self.priceLabel.text = [NSString stringWithFormat:@"¥%@", groupPurchase.price];
 7         self.buyCountLabel.text = [NSString stringWithFormat:@"%@人已经购买", groupPurchase.buyCount];
 8     }
 9
10     _groupPurchase = groupPurchase;
11 }

7.头部广告

其实就是之前的滚动广告放到 self.tableView.tableHeaderView

(1)设计界面

(2)创建class加载图片数据

(3)传入图片名的数组作为成员

1 // 广告组
2 @property(nonatomic, strong) NSArray *ads;

(4)加载图片

 1 /** 设置ads */
 2 - (void) setAds:(NSArray *)ads {
 3     if (nil != ads) {
 4         CGFloat adImageWidth = AD_VIEW_WIDTH;
 5         CGFloat adImageHeight = AD_VIEW_HEIGHT;
 6         CGFloat adImageY = 0;
 7
 8         for (int i=0; i<ads.count; i++) {
 9             // 计算当前图片的水平坐标
10             CGFloat adImageX = i * adImageWidth;
11
12             UIImageView *adImageView = [[UIImageView alloc] initWithFrame:CGRectMake(adImageX, adImageY, adImageWidth, adImageHeight)];
13             adImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@", ads[i]]];
14
15             [self.scrollView addSubview:adImageView];
16         }
17
18         // 设置滚动
19         self.scrollView.contentSize = CGSizeMake(ads.count * AD_VIEW_WIDTH, 0);
20         self.scrollView.scrollEnabled = YES;
21     }
22
23     _ads = ads;
24 }

(5)在主controller,设置好图片数据,创建头部控件加到头部位置

1     //设置头部广告
2     HeaderAdView *adView = [self genAdView]; // 手动拼装广告图片数据
3     self.tableView.tableHeaderView = adView;

(6)添加页码和自动轮播器

时间: 2024-12-10 18:31:09

[iOS基础控件 - 6.6] 展示团购数据 自定义TableViewCell的相关文章

[iOS基础控件 - 6.11.5] 沙盒 &amp; 数据存储

A.沙盒 每个APP都有一个沙盒,是独立存在的 1.Xcode5和Xcode6的模拟器文件目录 a.模拟器路径改版 (1)Xcode5中模拟器路径为:/Users/用户名/Library/Application Support/iPhone Simulator (2)Xcode6中模拟器路径为:/Users/用户名/ Library/Developer/CoreSimulator 应用程序包:(上图中的Layer)包含了所有的资源文件和可执行文件 b.沙盒路径改版 (1)Xcode5中沙盒的路径

iOS基础控件UINavigationController中的传值

iOS基础控件UINavigationController中的传值,代理传值,正向传值,反向传值 #import <UIKit/UIKit.h> //声明一个协议 @protocol SendValue<NSObject> //定义一个方法 - (void)sendBtnTitle:(NSString *)title; @end @interface FirstViewController : UIViewController // 定义代理 @property (nonatomi

[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基础控件 - 6.6.1] 展示团购数据代码[iOS基础控件 - 6.7] 微博展示 使用代码自定义TableCell(动态尺寸)

A.需求 1.类似于微博内容的展示 2.头像 3.名字 4.会员标志 5.内容 6.分割线 7.配图(可选,可有可无) B.思路.步骤 1.Controller:UITableViewController 改变控制器继承自UITableViewController,storyboard中也同时使用新的TableViewController,其TableView作为启动入口. 2.View:代码自定义cell 使用代码组装每个cell,动态改变控件的位置.尺寸 cell含有一个WeiboFrame

ios基础控件之开关按钮(UISwitch)

UISwitch控件是iOS开发的基础控件,是非常简单的一个控件,因为它的方法比较少.UISwitch继承于UIControl基类,因此可以当成活动控件使用. 注意:开关状态通过它的on属性进行读取,该属性是一个BOOL属性 创建: UISwitch* mySwitch = [[ UISwitch alloc]initWithFrame:CGRectMake(0.150.0f,100.0f,0.0f,0.0f)]; 可能你会疑问为什么它的大小都设置为0?没错,它的大小你设置是无效的,系统会为你分

[iOS基础控件 - 5.1] UIScrollView

A.需要掌握 UIScrollView 是一个能够滚动的视图控件,可以用来展示大量内容,如手机的“设置” 1.常见属性 2.常用代理方法 3.缩放 4.UIScrollView和UIPageControl的分页 5.NSTime的使用 B.UIScrollView概念与使用 练习:显示大图,以原始尺寸显示一张图片,可以滚动查看图片的各个部分 原图: 900 x 1305 1.拖入UIScrollView,加入一个ImageView,设置图片,设置图片尺寸 在controller中获取到scrol

[iOS基础控件 - 6.9.3] QQ好友列表Demo TableView

A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组 B.实现步骤 1.编写MVC结构 (1)根据plist文件结构,编写model,使用嵌套型 1 // 2 // FriendGroup.h 3 // FriendsList 4 // 5 // Created by hellovoidworld on 14/12/12. 6 // Copyright (c) 2014

【iOS基础控件 - 13】【Demo 】QQ好友列表TableView

A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组 code source: B.实现步骤 1.编写MVC结构 (1)根据plist文件结构,编写model,使用嵌套型 1 // 2 // FriendGroup.h 3 // FriendsList 4 // 5 // Created by hellovoidworld on 14/12/12. 6 // Copyr

iOS基础控件之 UIScrollView

A.需要掌握 UIScrollView 是一个能够滚动的视图控件,可以用来展示大量内容,如手机的“设置” 1.常见属性 2.常用代理方法 3.缩放 4.UIScrollView和UIPageControl的分页 5.NSTime的使用 B.UIScrollView概念与使用 练习:显示大图,以原始尺寸显示一张图片,可以滚动查看图片的各个部分 原图: 900 x 1305 1.拖入UIScrollView,加入一个ImageView,设置图片,设置图片尺寸 在controller中获取到scrol