基礎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的選擇