1-2基础控件
什么是UIImageView
UIKit框架提供了非常多的UI控件,但并不是每一個都很常用,有些控件可能1年內都用不上,有些控件天天用,比如UIButton、UILabel、UIImageView、UITableView等等
UIImageView極其常用,功能比較專一:顯示圖片
什么是UILabel
UILabel極其常用,功能比較專一:顯示文字
?
什么是按鈕
還有一個非常重要的UI控件---UIButton,俗稱“按鈕”,一般情況下,點擊某個控件后,會做出相應反應的都是按鈕
按鈕的功能比較多,既能顯示文字,又能顯示圖片,還能隨時調整內部圖片和文字的位置
?
UIButton的狀態
normal(普通狀態)
默認情況(Default)
對應的枚舉常量:UIControlStateNormal
highlighted(高亮狀態)
按鈕被按下去的時候(手指還未松開)
對應的枚舉常量:UIControlStateHighlighted
disabled(失效狀態,不可用狀態)
如果enabled屬性為NO,就是處于disable狀態,代表按鈕不可以被點擊
對應的枚舉常量:UIControlStateDisabled
設置按鈕的背景圖片
設置按鈕在不同狀態下的背景圖片(為了保證高亮狀態下的圖片正常顯示,必須設置按鈕的type為custom)
按鈕的樣式
實際上,UIButton自帶了很多種不同的樣式
在用代碼創建按鈕的同時指定按鈕樣式
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
UIButtonTypeCustom:無類型,按鈕的內容需要自定義
UIButtonTypeDetailDisclosure:
UIButtonTypeInfoLight:
UIButtonTypeInfoDark:
UIButtonTypeContactAdd:
UIButton的常見設置
?
Storyboard到代碼的轉換
// 創建一個自定義的按鈕UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];// 默認狀態的背景[btn setBackgroundImage:[UIImage imageNamed:@"btn_01"] forState:UIControlStateNormal];// 默認狀態的文字[btn setTitle:@"點我啊" forState:UIControlStateNormal];// 默認狀態的文字顏色[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
?
九宮格計算思路
?
HUD/指示器/蒙版/遮蓋
//顯示HUDNSString *text = nil;if(self.removeBtn.enabled == NO){text = @"表示已經刪光了";}elseif(self.addBtn.enabled == NO){text = @"表示已經添加滿了";}// if(text == nil) return;if(text){self.hud.text = text;self.hud.alpha = 1;dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(1.5*NSEC_PER_SEC)),dispatch_get_main_queue(),^{self.hud.alpha = 0.0;});}?
?
什么是Plist文件
直接將數據直接寫在代碼里面,不是一種合理的做法。如果數據經常改,就要經常翻開對應的代碼進行修改,造成代碼擴展性低
因此,可以考慮將經常變的數據放在文件中進行存儲,程序啟動后從文件中讀取最新的數據。如果要變動數據,直接修改數據文件即可,不用修改代碼
一般可以使用屬性列表文件存儲NSArray或者NSDictionary之類的數據,這種“屬性列表文件”的擴展名是plist,因此也稱為“plist文件”
創建Plist文件
?
解析Plist文件
接下來通過代碼來解析Plist文件中的數據
獲得Plist文件的全路徑
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"shops" ofType:@"plist"];
加載plist文件
_shops = [NSArray arrayWithContentsOfFile:path];
Plist文件的解析過程
Plist的使用注意
plist的文件名不能叫做“info”、“Info”之類的
添加plist等文件資源的時候,一定要勾選下面的選項
用模型取代字典的好處
使用字典的壞處:一般情況下,設置數據和取出數據都使用“字符串類型的key”,編寫這些key時,編輯器沒有智能提示,需要手敲
dict[@"name"] = @"Jack";
NSString *name = dict[@"name"];
手敲字符串key,key容易寫錯, Key如果寫錯了,編譯器不會有任何警告和報錯,造成設錯數據或者取錯數據
使用模型的好處:所謂模型,其實就是數據模型,專門用來存放數據的對象,用它來表示數據會更加專業
模型設置數據和取出數據都是通過它的屬性,屬性名如果寫錯了,編譯器會馬上報錯,因此,保證了數據的正確性
使用模型訪問屬性時,編譯器會提供一系列的提示,提高編碼效率
app.name = @"Jack";
NSString *name = app.name;
字典轉模型
字典轉模型的過程最好封裝在模型內部
模型應該提供一個可以傳入字典參數的構造方法
- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)xxxWithDict:(NSDictionary *)dict;
instancetype
instancetype在類型表示上,跟id一樣,可以表示任何對象類型
instancetype只能用在返回值類型上,不能像id一樣用在參數類型上
instancetype比id多一個好處:編譯器會檢測instancetype的真實類型
類前綴
使用Objective-C開發iOS程序時,最好在每個類名前面加一個前綴,用來標識這個類的“老家”在哪
目的是防止N個人開發了一樣的類,沖突了
比如Jake Will、Kate Room在同一個項目中都各自開發了個Button類,這樣的程序是不能運行起來的
解決方案:Jake Will的類名叫做JWButton,Kate Room的類名叫做KRButton
字典轉模型的過程
?
view的封裝
如果一個view內部的子控件比較多,一般會考慮自定義一個view,把它內部子控件的創建屏蔽起來,不讓外界關心
外界可以傳入對應的模型數據給view,view拿到模型數據后給內部的子控件設置對應的數據
封裝控件的基本步驟
在initWithFrame:方法中添加子控件,提供便利構造方法
在layoutSubviews方法中設置子控件的frame(一定要調用super的layoutSubviews)
增加模型屬性,在模型屬性set方法中設置數據到子控件上
簡單的MVC
?
Xib和storyboard對比
? 共同點:
都用來描述軟件界面
都用Interface Builder工具來編輯
本質都是轉換成代碼去創建控件
? 不同點
Xib是輕量級的,用來描述局部的UI界面
Storyboard是重量級的,用來描述整個軟件的多個界面,并且能展示多個界面之間的跳轉關系
Xib的加載
?
使用xib自定義view的步驟
新建自定義控件類
新建xib文件(文件名建議和view的類名一致)
?
修改xib中view的類名
封裝xib的加載過程
在類擴展中增加子控件屬性,然后關聯子xib中子控件
@interface XMGShopView()
@property(weak,nonatomic)IBOutlet UIImageView *iconView;
@property(weak,nonatomic)IBOutlet UIlabel *nameLabel;
@end
增加模型屬性,在模型屬性set方法中設置數據到子控件上
?
注意點
一個控件有2種創建方式
通過代碼創建,初始化時一定會調用initWithFrame:方法
通過xib\storyboard創建
初始化時不會調用initWithFrame:方法,只會調用initWithCoder:方法
初始化完畢后會調用awakeFromNib方法
有時候希望在控件初始化時做一些初始化操作,比如添加子控件、設置基本屬性
這時需要根據控件的創建方式,來選擇在initWithFrame:、initWithCoder:、awakeFromNib的哪個方法中操作
UIImage
一個UIImage對象代表一張圖片,一般通過imageNamed:方法就可以通過文件名加載項目中的圖片
UIImage *image = [UIImage imageNamed:@"lufy"];
UILabel的基本設置
要想讓UILabel自動換行,設置Lines為0即可
讓UILabel的文字居中顯示
@property(nonatomic,copy) NSString *text; //顯示的文字 @property(nonatomic,retain) UIFont *font; //字體 @property(nonatomic,retain) UIColor *textColor; //文字顏色 @property(nonatomic) NSTextAlignment textAlignment; //對齊模式(比如左對齊、居中對齊、右對齊)
?
UIFont
UIFont代表字體,常見創建方法有以下幾個:
?
UIButton、UIImageView、UILabel的選擇
特點
UIButton
既能顯示文字,又能顯示圖片(能顯示2張圖片,背景圖片、內容圖片)
長按高亮的時候可以切換圖片\文字
直接通過addTarget...方法監聽點擊
UIImageView
能顯示圖片,不能直接通過addTarget...方法監聽點擊
UILabel
能顯示文字,不能直接通過addTarget...方法監聽點擊
選擇
僅僅是顯示數據,不需要點擊
建議選擇UIImageView、UILabel
不僅顯示數據,還需要監聽點擊
建議選擇UIButton
其實UIImageView、UILabel也可以通過手勢識別器來監聽(后面課程會學)
長按控件后,會改變顯示的內容
不用考慮了,選擇UIButton(因為UIButton有highlighted這種狀態)
同時顯示2張圖片:背景圖片、內容圖片
不用考慮了,選擇UIButton
常用的Xcode插件
Xcode插件大全
http://www.cocoachina.com/industry/20130918/7022.html
必備
文檔注釋生成:https://github.com/onevcat/VVDocumenter-Xcode
自動檢索圖片名:https://github.com/ksuther/KSImageNamed-Xcode
取色:https://github.com/omz/ColorSense-for-Xcode
插件管理工具:https://github.com/mneorr/Alcatraz
???? 移除插件(可以使用上面提到的插件管理工具Alcatraz)
到~/Library/Application Support/Developer/Shared/Xcode/Plug-ins文件夾中刪除
???? 插件失效修復:http://joeshang.github.io/2015/04/10/fix-xcode-upgrade-plugin-invalid/
如何獲得APP內部資源
安裝一個iTools(百度一下就有)
用USB連接設備,打開iTools
?
轉載于:https://www.cnblogs.com/laugh/p/6364607.html
總結
- 上一篇: matlab 矩阵拼接
- 下一篇: 日常总结(4)