一.UipickerViewDataSource
// 返回有多少列- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;// 返回第component有多少行- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
二.UIPickerViewDelegate
// 返回第component列多寬- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component// 返回第component列多高- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component// 返回第component列第row行標題- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component// NSAttributedString:富文本,可以描述文本的外觀屬性,顏色,字體,陰影,空心,圖文混排//- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component// 返回第component列第row行視圖控件- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view// 當用戶選中某一行的時候調用// 選中第component列第row行的時候調用// 可以監聽pickerView滾動- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
一.UITextFieldDelegate
// 是否允許改變文本框的文字// 是否允許用戶輸入文字// 作用:攔截用戶的輸入- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ return NO;}// 是否允許開始編輯// 允許編輯文本框- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField// 是否允許文本框結束編輯- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
二.自定義鍵盤 鍵盤由文本框inputView屬性決定
三.KVC底層實現
// setValuesForKeysWithDictionary底層實現// 利用KVC字典轉模型, [flag setValuesForKeysWithDictionary:dict]; // 1.遍歷字典中的所有key [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { // 2.給模型的屬性賦值,利用KVC,把字典中的key當做模型的屬性名使用,字典中的值傳遞給模型的屬性. [flag setValue:obj forKey:key]; // name -> icon // KeyPath:模型中的屬性名 // 屬性的值// [flag setValue:dict[@"name"] forKey:@"name"];// [flag setValue:dict[@"icon"] forKey:@"icon"]; }];// setValue:forKey:底層實現// 給模型中的icon屬性賦值// [flag setValue:dict[@"icon"] forKey:@"icon"];// 1.首先去尋找模型中有木有setIcon:方法,直接調用setIcon:方法,[flag setIcon:dict[@"icon"]]// 2.接著尋找模型中有沒有icon的屬性名,如果有,就直接賦值 icon = dict[@"icon"]// 3.接著尋找模型中有沒有_icon的屬性名,如果有,就直接賦值 _icon = dict[@"icon"]// 4.找不到,直接報錯,setValue:forUndefinedKey:
四.UIDatePicker
// 創建一個UIDatePicker UIDatePicker *datePicker = [[UIDatePicker alloc] init]; // 設置日期模型 datePicker.datePickerMode = UIDatePickerModeDate; // 設置地區,zh:中國 datePicker.locale = [NSLocale localeWithLocaleIdentifier:@"zh"]; // 監聽UIDatePicker的選中的日期 [datePicker addTarget:self action:@selector(dateChange:) forControlEvents:UIControlEventValueChanged];
一.UIStoryboard:幫你加載storyboard文件
// UIStoryboard : 幫你加載storyboard文件 // 加載storyboard文件 // name:storyboard文件名,不需要后綴名 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; // 創建storyboard描述的控制器 // instantiateInitialViewController幫你加載箭頭指向的控制器 UIViewController *vc = [storyboard instantiateInitialViewController]; // 根據標識符創建storyboard描述的控制器// UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"org"];
一.通過xib創建控制器原因:
是想通過Xib描述控制器的view
二.如何通過xib創建控制器
1.讓xib與控制器產生聯系,設置xib的文件擁有者是控制器,這時候xib就描述這個控制器 2.連線,告訴控制器是哪個view在描述
一.loadView
什么時候調用:當第一次使用控制器的view的時候就會調用
作用:加載控制器的view,自定義控制器的view
注意:
1.只要重寫loadView,必須自己手動創建控制器的view
2.在沒給_view賦值之前,不能調用self.view;
二.loadView加載流程
三.xib加載控制器的view
init底層會調用initWithNibName:bundle:
// 通過xib創建XMGViewController控制器的view// 1.判斷下nibName有沒有值,如果有值,就會去加載nibName指定的xib// 2.如果nibName為空,會先去查找有沒有XMGView.xib,如果有就去加載// 3.如果沒有XMGView.xib,就會去加載根類名同名的xib:XMGViewController.xib// 4.如果還沒有找到,就生成一個空的view
四.控制器的view延遲加載
五.控制器view默認的是幾乎透明的
一.導航控制器必須要有一個根控制器
二.如果是導航控制器的子控制器可以直接拿到導航控制器
三.initWithRootViewController底層其實是調用導航控制器的push方法,把vc成為導航控制器的子控制器
|
新聞熱點
疑難解答