? ? ? 小白一枚,接觸IOS也有一段時間了.如今就UI這里,簡單的談一談兩個多視圖控制器和數(shù)據(jù)儲存的學(xué)習(xí)心得.首先了解到UIPickerView這個新的控件,它就是平常app上面勾選日期省市的那種控件.它和tableView一樣也有數(shù)據(jù)源和代理方法.可以在頭文件中進行查找.數(shù)據(jù)源方法中有兩個必須設(shè)置的
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;和
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
其實它和tableView跟collectionView差不多的.了解方法后只需要設(shè)置相應(yīng)的要求就行.然后是UIApplication,獲取當(dāng)前App對象的單例設(shè)計模式,在平常App中比較高大上的跳轉(zhuǎn)頁面,打電話等功能其實只需要
- (BOOL)openURL:(NSURL*)url
這個簡單的方法就可以實現(xiàn).之后學(xué)習(xí)了UINavigationController和UITabBarController這兩個多視圖控制器,他們可以管理多個控制器.UINavigationController導(dǎo)航控制器,主要管理有層級關(guān)系的控制器,繼承自UIViewController,最少要有一個被管理的控制器作為根控制器.UINavigationController基本使用有 ??
?1:跳轉(zhuǎn)下一個控制器pushViewController:[下一個控制器] animated:YES促煮; ? ? ? ? ? ?
?2:返回上一個控制器 poptoViewController:[上一個控制]animated:YES若未;? ? ? ? ? ? ? ?
?3:返回根控制器 poptoRootViewControllerAnimated:YES.
它的導(dǎo)航欄設(shè)置由棧頂控制器的navigationItem屬性決定.在navigationItem中設(shè)置的左按鈕、右按鈕,標(biāo)題等會隨著控制器的顯示,也顯示到navigationBar上.
? ? ? UITabBarController顯示出的效果就是平常微信中使用的界面,需要設(shè)置子控制器,讓后將子控制器添加到UITabBarController上面.它下方的工具條稱為UITabBar,如果UITabBarController有多個子控制器,那么UITabBar上就會有同樣個數(shù)的子控件與之相對應(yīng),他們在UITabBar的位置是系統(tǒng)自動跟你均分的, UITabBar的高度為49,因為下方多一個label,所以高度在44的基礎(chǔ)上增加了5.有兩種方式可以往UITabBarController中添加子控制器[tab addChildViewController:red];? 和tab.viewControllers = @[red,blue];? (tab表示創(chuàng)建的tabBar控制器,red和blue表示創(chuàng)建的子控制器).
? ? ? 在iOS 7.0之后出現(xiàn)了圖片的渲染效果UIImageRenderingModeAutomatic(根據(jù)圖片的使用環(huán)境和所處的繪圖上下文自動調(diào)整渲染模式) UIImageRenderingModeAlwaysOriginal(始終繪制圖片原始狀態(tài),不使用Tint Color)r如果想要改變tabBar下的字體顏色,需要使用tintColor這個屬性來對字體進行渲染,用取色器讀取你想要改變的顏色.
? ? ? 之后了解了數(shù)據(jù)存儲的幾種方式,
第一種writeTofile首先獲取你需要存入的路徑,并且拼接好對應(yīng)的文件名以及格式 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingPathComponent:@"data.plist”;之后把數(shù)據(jù)寫入數(shù)組中,再用- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;這個方法把數(shù)據(jù)存入到文件中讀取數(shù)據(jù)也是先獲取相應(yīng)路徑,之后用+ (nullable NSArray*)arrayWithContentsOfFile:(NSString *)path;方法讀取出數(shù)據(jù).
第二種是偏好設(shè)置,它不需要獲取路徑NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];(獲取系統(tǒng)的偏好設(shè)置對象,standard share 一般都是單例)[defaults setObject:@"小明" forKey:@"name”];(存儲數(shù)據(jù))同時它需要立即同步,防止數(shù)據(jù)丟失[defaults synchronize];它的讀取也是先獲取偏好設(shè)置的路徑,之后用NSUserDefaults的方法讀取數(shù)據(jù).
第三種也是我個人覺得比較復(fù)雜的方式—歸檔(因為個人感覺有點難,所以代碼就貼的詳細(xì)點).首先它也是先獲取文件路徑
NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"data.plist"];? 之后創(chuàng)建一個對象CZPserson *p = [[Pserson alloc]init];寫入數(shù)據(jù)p.name = @"小明”;
存儲歸檔 注意1.該對象必須遵守NSCoding 協(xié)議 編碼協(xié)議@interface Pserson : NSObject
2.實現(xiàn)encodeWithCoder方法- (void)encodeWithCoder:(NSCoder *)aCoder{[aCoder encodeObject:self.name forKey:@"name”];}
3.實現(xiàn)initWIthCoder方法- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
? ? ? ?if (self = [super init]) {
? ? ? ?self.name = [aDecoder decodeObjectForKey:@"name"];
}
? ? ? return self;?
}
以上就是我所學(xué)習(xí)到的內(nèi)容,感覺自己掌握的還不是很牢固,但是勤能補拙,我相信多加練習(xí)一定可以熟練的掌握.貼上這篇文章記錄我的編程學(xué)習(xí)之旅.