基礎(chǔ)UI控件綜合使用
要求:
寫一個(gè)程序鲫尊,類似于淘寶的購(gòu)物車,用戶點(diǎn)擊添加按鈕,就會(huì)把一件商品加入到購(gòu)物車中蓖柔,等購(gòu)物車滿了奢人,可以點(diǎn)擊刪除按鈕刪除購(gòu)物
車中商品
設(shè)計(jì)思想:
把UIImageView和UITextView合并放到一個(gè)VIew中,然后用這個(gè)整體的View進(jìn)行布局,點(diǎn)擊添加按鈕可以
發(fā)現(xiàn)幾個(gè)控件是一個(gè)整體牛哺,可以先建立一個(gè)控件容器陋气,然后把需要的控件都合并到這個(gè)容器中
在項(xiàng)目中經(jīng)城⒃悖可能會(huì)發(fā)現(xiàn)明明文件和資源在項(xiàng)目里面炉菲,但是不能使用,很有可能是因?yàn)闆]有參與編譯和打包坤溃,不能使用info.plist
懶加載
九宮格排版控件算法
詳細(xì)使用
按鈕狀態(tài)的控制
在需要的時(shí)候添加指示器-HUD
使用plist文件保存數(shù)據(jù)
一個(gè)NSBundle對(duì)象對(duì)應(yīng)一個(gè)資源包(圖片薪介、音頻祠饺、視頻、plis等文件)
NSBundle的作用:用來訪問與之對(duì)應(yīng)的資源包內(nèi)部的文件汁政,可以用來獲得文件的全路徑
項(xiàng)目中添加的資源都會(huì)被添加到主資源包中
[NSBundle mainBundle]關(guān)聯(lián)的就是項(xiàng)目的主資源包
??? // 加載plist文件
??? NSBundle *bundle = [NSBundle mainBundle];
??? // 利用mainBundle獲得主資源包中文件的全路徑
??? NSString *filepath = [bundle pathForResource:@"shops" ofType:@"plist"];
??? // 凡是文件參數(shù)為File道偷,傳遞的都是文件全路徑
??? self.shops = [NSArray arrayWithContentsOfFile:filepath];
懶加載
加載plist數(shù)據(jù)(比較大)
懶加載:用到時(shí)再去加載,而且也只加載一次
在調(diào)用的時(shí)候會(huì)用到Get方法
通過重寫Get方法记劈,來實(shí)現(xiàn)懶加載
// 重寫shops的get方法勺鸦,實(shí)現(xiàn)在調(diào)用的時(shí)候才加載數(shù)據(jù) : 懶加載
- (NSArray *) shops{
??? if (_shops == nil){
??????? NSString *file = [[NSBundle mainBundle] pathForResource:@"shops" ofType:@"plist"];
??????? self.shops = [NSArray arrayWithContentsOfFile:file];
??? }
??? return _shops;
}
模型
建立一個(gè)類用來封裝數(shù)據(jù) : 數(shù)據(jù)模型類
instancetype用來定義一個(gè)自動(dòng)獲取返回值類型的函數(shù)
// 使用構(gòu)造函數(shù)方法把數(shù)據(jù)庫文件內(nèi)容賦值給自定義數(shù)據(jù)模型類
- (instancetype) initWithDict:(NSDictionary *)Dict{
??? if (self = [super init]){
??????? self.name = Dict[@"name"];
??????? self.icon = Dict[@"icon"];
??? }
??? return self;
}
// 類方法用來提供快捷初始化對(duì)象方法
+ (instancetype) initWihtDict:(NSDictionary *)Dict{
??? return [[self alloc] initWithDict:Dict];
}
View的封裝
layoutSubviews的調(diào)用
這個(gè)方法專門用來布局子控件,一般在這里設(shè)置子控件的frame
當(dāng)控件本身的尺寸發(fā)生改變的時(shí)候抠蚣,系統(tǒng)會(huì)自動(dòng)調(diào)用這個(gè)方法
- (void)layoutSubviews
{
??? // 一定要調(diào)用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的選擇