iOS基礎 - UIDatePicker and UIPickerView and UITextField

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 當點擊按鈕時,通知代理 讓控制器做爲工具條的代理,並實現工具條代理方法

步驟五:躲避鍵盤

相關文章
相關標籤/搜索