创建数据模型
- 现在一个基础shop对象需要这两个信息
/** 图片名 */
@property (strong, nonatomic) NSString *icon;
/** 商品名 */
@property (strong, nonatomic) NSString *name;
- 首先将字典内容转化为模型
- (instancetype)initWithDict:(NSDictionary *)dict{
if (self = [super init]) {
self.icon = dict[@"icon"];
self.name = dict[@"name"];
}
return self;
}
- 然后在读取plist文件时调用转换方法
/** 懒加载shops内容 */
- (NSArray *)shops{
if (_shops == nil){
NSString *file = [[NSBundle mainBundle] pathForResource:@"shops" ofType:@"plist"];
NSArray *dictArray = [NSArray arrayWithContentsOfFile:file];
NSMutableArray *shopsArray = [NSMutableArray array];
for (NSDictionary *dict in dictArray){
XBShop *shop = [XBShop shopWithDict:dict];
[shopsArray addObject:shop];
}
_shops = shopsArray;
}
return _shops;
}
自定义控件
-
shopView 控件由三块组成
- UIView
- UIImageView
- UIlabel
- UIView
shopView 有自己的shop信息
/** 商品模型 */
@property (strong, nonatomic) XBShop *shop;
- 内部有封装好的两个子控件
@interface XBShopView ()
@property(strong, nonatomic)UIImageView *shopIcon;
@property(strong, nonatomic)UILabel *nameLabel;
@end
- 加载shop信息的同时,设置两个子控件的内容
- (void)setShop:(XBShop *)shop{
_shop = shop;
self.shopIcon.image = [UIImage imageNamed:shop.icon];
self.nameLabel.text = shop.name;
}
-
同时重写两个子控件的getter。懒加载进行默认设置,设置内容如下。
- 背景色
- 字体
- 对齐方式
- 加载到父控件
-
当自定义控件frame变化同时,修改其子控件frame。
- 重写 -(void)layoutSubViews 方法.
- 当控件frame变化是,会自动调用 -(void)layoutSubViews 方法.
- 添加新控件
- 拿到数据模型
- 传入自定义控件
- 用自定义控件内部封装的方法进行设置
- 计算并设置控件坐标
HUD##
- HUD是一段忽然出现的提示信息
- 提醒用户
- 一段时间后会自动消失
- 一般用UILbael控件
self.hud.alpha = 1.0; // 设置透明度为1.0可见
self.hud.text = text; // 设置文本内容
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.hud.alpha = 0.0; // 1.5s 后设置透明度为0.0消失
});
定时任务
- 方法1:performSelector
// 1.5s后自动调用self的hideHUD方法
[self performSelector:@selector(hideHUD) withObject:nil afterDelay:1.5];
- 方法2:GCD
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 1.5s后自动执行这个block里面的代码
self.hud.alpha = 0.0;
});
- 方法3:NSTimer
// 1.5s后自动调用self的hideHUD方法
[NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(hideHUD) userInfo:nil repeats:NO];
// repeats如果为YES,意味着每隔1.5s都会调用一次self的hidHUD方法