1.UIDatePicker繼承自UIControl,所以不會經過代理來監聽事件的改變,而是經過addTarget來監聽事件。監聽的事件是值改變事件。數組
2.UIPickerView繼承自UIView,裏面有數據源和代理,所以UIPickerView展現數據經過數據源,監聽事件經過代理。工具
1、如何監聽控件的一些事件 或者 行爲優化
* 若是父類是UIControl,說明是經過addTarget:action:forControlEvents:方法來監聽控件的一些事件atom
* 若是父類不是UIControl,說明通常是經過代理方法來監聽控件的一些行爲代理
2、UIDatePicker 1.常見屬性component
/* orm
樣式 繼承
UIDatePickerModeTime,時間 接口
UIDatePickerModeDate,日期 事件
UIDatePickerModeDateAndTime 日期 + 時間
*/
@property(nonatomic) UIDatePickerMode datePickerMode;
/*
區域
中國:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"]
*/
@property(nonatomic,retain) NSLocale *locale;
2.事件監聽
1> 由於它繼承自UIControl,因此跟按鈕同樣監聽
- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
2> 事件類型:UIControlEventValueChanged
3、UIPickerView
1.須要靠dataSource和delegate來顯示數據
@property(nonatomic,assign) id<UIPickerViewDataSource> dataSource;
@property(nonatomic,assign) id<UIPickerViewDelegate> delegate;
2.常見數據源和代理方法
1> 數據源方法
// 一共有多少列
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
// 第component列有多少行
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
2> 代理方法
// 第component列第row行顯示怎樣的文字
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
// 第component列第row行顯示怎樣的view
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;
// 選中了第component列第row行就會調用
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
3.常見方法
1> 是否顯示「選中指示器」
@property(nonatomic) BOOL showsSelectionIndicator;
2> 刷新數據(從新調用數據源和代理的方法來顯示數據)
- (void)reloadAllComponents;// 刷新全部的列
- (void)reloadComponent:(NSInteger)component;// 只刷新第component列
3> 經過代碼選中第component列第row行
- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated;
4> 得到第component列所選中的行號
- (NSInteger)selectedRowInComponent:(NSInteger)component;
4、UITextField 1.常見屬性
1> 鍵盤
@property (readwrite, retain) UIView *inputView;
2> 鍵盤頂部的工具條
@property (readwrite, retain) UIView *inputAccessoryView;
3> 代理
@property(nonatomic,assign) id<UITextFieldDelegate> delegate;
2.常見方法
1> 叫出鍵盤
- (BOOL)becomeFirstResponder;
2> 退出鍵盤
- (BOOL)resignFirstResponder;
3.常見代理方法
1> 若是返回NO,表明文本框不能編輯、不能彈出鍵盤
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField;
2> 若是返回NO,表明禁止改變文本框的文字(不能增長、刪除文字)
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
3> 點擊了鍵盤右下角的按鈕就會調用(return key)
- (BOOL)textFieldShouldReturn:(UITextField *)textField;
5、UIButton的狀態
UIControlStateNormal // 默認、普通
UIControlStateHighlighted // 高亮(當用戶長按的時候達到這種狀態)
UIControlStateDisabled // 不可用(這種狀態下的按鈕不能處理任何點擊事件,enabled = NO的時候就能達到這種狀態)
// 當切換狀態的時候,按鈕就會顯示對應狀態的背景圖片、小圖片、文字、文字顏色
6、控件的封裝
1.爲何封裝?
1> 重用某個經常使用的功能
2> 屏蔽某個功能的實現細節
2.封裝的步驟
1> 自定義一個View(新建一個繼承UIView的類)
2> 若是控件內部的內容是固定的,能夠用一個xib文件來描述所封裝控件內部的細節
3> 所封裝控件內部的事件,應該經過代理傳遞出去 * 當所封裝控件內部發生了一些事情,應該通知代理,代理得知內部的事件後,就能夠在代理方法中實現想作的事情
1.點餐系統思路
步驟一:遵照和實現UIPickerView的數據源。
步驟二:加載plist文件。
步驟三:遵照和實現UIPickerView的代理方法,監聽選中每一行的方法。
步驟四:監聽UIBarButtonItem隨機的事件
注意:UIPickerView代理方法只有手動選中某一行,纔會通知代理,經過代碼選中,不會調用代理方法。
2.城市選擇思路
步驟一:解析plist文件,建立對應的模型。
步驟二:用一個數組將模型保存起來。
步驟三:手動代碼建立UIPickerView,實現它的數據源和代理方法。
步驟四:默認選中第0個省份的第0個城市。
3.國旗例子思路
步驟一:解析plist文件,建立對應的模型
步驟二:用一個數組將模型保存起來
步驟三:實現UIPickerView的數據源和代理方法
步驟四:建立一個xib,描述每一行顯示的視圖
步驟五:建立自定義視圖,和xib綁定。而且與xib中的控件連線,而且給外界提供一個接口,返回自定義視圖。
步驟六:優化UIPickerView
4.鍵盤處理例子思路
步驟一:簡單搭建界面 監聽性別按鈕點擊,修改按鈕的狀態
步驟二:自定義鍵盤
生日鍵盤
1.1 禁止生日鍵盤輸入文字
1.2 監聽生日鍵盤的值改變事件 地址鍵盤
2.1 實現數據源和代理方法和以前城市選中例子相同。
城市鍵盤
1.用xib描述城市鍵盤,而且設置UIPickerView的代理和數據源,建立自定義視圖。
2.加載數據,在awakeFromNib中調用實現數據源和代理方法。
3.調用自定義視圖設置城市鍵盤 給自定義城市鍵盤聲明一個協議,並添加一個代理屬性,當滾動鍵盤的時候,通知代理作些事情。
4.設置自定義城市鍵盤的代理爲控制器,而且實現代理方法。
步驟三。重構代碼
1.cheakBox 封裝性別按鈕代碼,用一個xib來描述,並清空背景顏色 自定義一個自定義性別視圖和xib綁定,監聽按鈕的點擊 手動添加自定義性別視圖,
步驟四:工具條
1.建立一個xib描述工具條 將toolbar用view包裝起來,目的不讓外界修改toolbar,由於外界拿到的是UIView,而不是toolbar,就不能直接獲取toolbar裏面的屬性了。
2.自定義一個自定義工具條類,和xib綁定。
3.定義一個協議,通知代理按鈕點擊事件 定義一個枚舉類型,區分按鈕
4.2 協議方法將按鈕類型傳遞出去
4.3 當點擊按鈕時,通知代理 讓控制器做爲工具條的代理,並實現工具條代理方法
步驟五:躲避鍵盤