iOS MVC简单使用

创建数据模型

  • 现在一个基础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
  • 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方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容