一直隨著應(yīng)用環(huán)境的變化在更新UINavigationController的使用!學(xué)無止境,。 給單獨的viewcontroller或者在Appdelegate的主頁面添加導(dǎo)航條,只要在viewcontroller上添加navigationcontroller,在添加此navigationcontroller即可 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
ViewController *mainView = [[ViewController alloc]init]; UINavigationController *navi = [[UINavigationController alloc]initWithRootViewController:mainView]; navi.navigationBar.backgroundColor = [UIColor blueColor]; [self.window setRootViewController:navi]; [self.window makeKeyAndVisible]; return YES; } 導(dǎo)航條的字體和顏色的設(shè)置 self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]; // --- 字體顏色 [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"BJ.png"] forBarMetrics:UIBarMetricsDefault]; // — 背景色 導(dǎo)航條跳轉(zhuǎn)頁面的考慮 對于用navigationcontroller來跳轉(zhuǎn)頁面的時候,,其實是執(zhí)行堆棧的進棧和出棧的操作,,要想釋放內(nèi)存,那么在來回跳轉(zhuǎn)的時候,,就要考慮幾個問題了 1 A =>B=>C=>D, D=>A 有根視圖的話 (HOME) [self.navigationController popToRootViewControllerAnimated:YES]; D=>C (每一個界面返回上一層) [self.navigationController popViewControllerAnimated:YES]; 返回到上一層,,并且傳遞參數(shù) //此頁面已經(jīng)存在于self.navigationController.viewControllers中,并且是當前頁面的前一頁面
CViewController *cvc = [self.navigationController.viewControllers 2 ]; CViewController *cvc = [CViewController alloc]init]; cvc.str = self.str; [self.navigationController popToViewController:cvc animated:true]; 返回到上一層后,上一頁面顯示后要接收參數(shù),,并刷新,。注意此時應(yīng)該在viewDidAppear中進行判斷并接收傳遞的值 -(void)viewDidAppear:(BOOL)animated { //判斷并接收返回的參數(shù) } 2 A =>B=>C=>D=>E,E=>B=>C=>E 因為B在之前已經(jīng)出現(xiàn)過,不能在E中直接PUSH到B,,因為那樣已經(jīng)是兩個B了,,增加內(nèi)存,,所以在跳轉(zhuǎn)的時候,就要進行判斷是否之前已經(jīng)出現(xiàn)過B了,,出現(xiàn)過,,則直接push。這樣push到的是原有的B,,不會在內(nèi)存中重新生成一個B了,。 NSArray *array = self.navigationController.viewControllers; for (UIViewController *vc in array) { if ([vc isKindOfClass:[BXXXViewController class]]) { push VC; } 或者知道每個界面的指針 [self.navigationController popToViewController: [self.navigationController.viewControllers objectAtIndex: ([self.navigationController.viewControllers count] -4)] animated:YES]; 在使用時,,根據(jù)自己返回層的需要,,只要改變一下“-4”這個數(shù)字就可以達到目的了 //=====2016年3月17日 增加導(dǎo)航條的變化 Xcode7.2 很多的應(yīng)用現(xiàn)在都做到了,隨著頁面的滑動導(dǎo)航條的顏色也會發(fā)生變化,,現(xiàn)在使用原生的導(dǎo)航條來體現(xiàn)一下基本原理,。。,。 *在項目屬性里設(shè)置
才可以改變導(dǎo)航條上20像素位置的狀態(tài)欄顏色 干貨: 本例使用的 UITableView 添加KVO實現(xiàn)監(jiān)控滑動位置的變化 [_myTable addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew| NSKeyValueObservingOptionInitial context:nil]; -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context -(void)navChange 上效果圖 無圖無真相 demo地址:https://github.com/Lian1990/NavColorRamp |
|