基础UI控件综合使用
要求:
写一个程序,类似于淘宝的购物车,用户点击添加按钮,就会把一件商品加入到购物车中,等购物车满了,可以点击删除按钮删除购物
车中商品
设计思想:
把UIImageView和UITextView合并放到一个VIew中,然后用这个整体的View进行布局,点击添加按钮可以
发现几个控件是一个整体,可以先建立一个控件容器,然后把需要的控件都合并到这个容器中
在项目中经常可能会发现明明文件和资源在项目里面,但是不能使用,很有可能是因为没有参与编译和打包,不能使用info.plist
懒加载
九宫格排版控件算法
详细使用
按钮状态的控制
在需要的时候添加指示器-HUD
使用plist文件保存数据
一个NSBundle对象对应一个资源包(图片、音频、视频、plis等文件)
NSBundle的作用:用来访问与之对应的资源包内部的文件,可以用来获得文件的全路径
项目中添加的资源都会被添加到主资源包中
[NSBundle mainBundle]关联的就是项目的主资源包
// 加载plist文件
NSBundle *bundle = [NSBundle mainBundle];
// 利用mainBundle获得主资源包中文件的全路径
NSString *filepath = [bundle pathForResource:@"shops" ofType:@"plist"];
// 凡是文件参数为File,传递的都是文件全路径
self.shops = [NSArray arrayWithContentsOfFile:filepath];
懒加载
加载plist数据(比较大)
懒加载:用到时再去加载,而且也只加载一次
在调用的时候会用到Get方法
通过重写Get方法,来实现懒加载
// 重写shops的get方法,实现在调用的时候才加载数据 : 懒加载
- (NSArray *) shops{
if (_shops == nil){
NSString *file = [[NSBundle mainBundle] pathForResource:@"shops" ofType:@"plist"];
self.shops = [NSArray arrayWithContentsOfFile:file];
}
return _shops;
}
模型
建立一个类用来封装数据 : 数据模型类
instancetype用来定义一个自动获取返回值类型的函数
// 使用构造函数方法把数据库文件内容赋值给自定义数据模型类
- (instancetype) initWithDict:(NSDictionary *)Dict{
if (self = [super init]){
self.name = Dict[@"name"];
self.icon = Dict[@"icon"];
}
return self;
}
// 类方法用来提供快捷初始化对象方法
+ (instancetype) initWihtDict:(NSDictionary *)Dict{
return [[self alloc] initWithDict:Dict];
}
View的封装
layoutSubviews的调用
这个方法专门用来布局子控件,一般在这里设置子控件的frame
当控件本身的尺寸发生改变的时候,系统会自动调用这个方法
- (void)layoutSubviews
{
// 一定要调用super的layoutSubviews
[super layoutSubviews];
CGFloat shopW = self.frame.size.width;
CGFloat shopH = self.frame.size.height;
self.iconView.frame = CGRectMake(0, 0, shopW, shopW);
self.nameLabel.frame = CGRectMake(0, shopW, shopW, shopH - shopW);
}
UIButton、UIImageView、UILabel的选择
网友评论