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