[课堂实践与项目]NavigationController与TabBarController的综合使用及易错点分析(包含消息提醒,app更新)...
陳述:我們在使用tabbarController的時候,我們總會和NavagationController聯合起來。但是不聯合的時候又是什么樣的一種pool的情況呢?我們就單單的 TabBarController ?來進行介紹。最后復習一下兩個空間結合起來達成的完美效果
、、-----------------單獨的TabbarController的使用
1.我們先使用TabbarController 來進行view的創建
由于h文件中沒什么內容,我們就直接跳轉到代理的實現文件吧
?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];// Override point for customization after application launch.self.window.backgroundColor = [UIColor whiteColor];LCFirstViewController *firstVC = [[LCFirstViewController alloc]init];LCSecondViewController *secondVC = [[LCSecondViewController alloc]init];NSArray *array = [NSArray arrayWithObjects:firstVC,secondVC, nil];UITabBarController *tabBarVC = [[UITabBarController alloc]init];tabBarVC.viewControllers = array;[self.window setRootViewController:tabBarVC];[self.window makeKeyAndVisible];return YES; }可以看得出,我們把兩個VC文件封裝成了一個 Array的組,然后放到 UITabBarController的viewControllers下。這樣子來說,我們的兩個視圖就做好了,我們運行之后,可能會發現我們的APP 竟然是空白一片。好了,我忘記說了,我們可以設置一些標志。button什么的都是temp的。
?
那么我們如何設置我們的item名字為 一個有意義的名字呢 ?
2.看看我們的firstViewController的init,你就明白了
?
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {// self.title = @"first";self.tabBarItem.title = @"firstView";self.tabBarItem.image = [UIImage imageNamed:@"1.png"];}return self; }
你可能會驚訝,我們的h m文件中都沒有 tabbarItem,但是為什么self之后就能出現呢?
?
因為這是apple因為為我們封裝好的框架,但是我們沒有使用的時候,是hidden的。有的時候,必須設置成 no才可以的。
如果你把我注釋的 ?self.title = @“first”去掉注釋,然后去掉 下面的那句,那你就會發現, 我們的item的名稱就會變化。這是為什么么?self.title有什么牛逼的作用?我們在導航介紹完之后就會告訴大家。別著急哦
//導航控制器和 TabBarController的綜合使用
3.現在我們就修改一下,delegate.m中的一些代碼,來實現綜合使用吧
?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];// Override point for customization after application launch.self.window.backgroundColor = [UIColor whiteColor];LCFirstViewController *firstVC = [[LCFirstViewController alloc]init];LCSecondViewController *secondVC = [[LCSecondViewController alloc]init];UINavigationController *navFirstVC = [[UINavigationController alloc]initWithRootViewController:firstVC];UINavigationController *navSecondVC = [[UINavigationController alloc]initWithRootViewController:secondVC];NSArray *array = [NSArray arrayWithObjects:navFirstVC,navSecondVC, nil];UITabBarController *tabBarVC = [[UITabBarController alloc]init];tabBarVC.viewControllers = array;[self.window setRootViewController:tabBarVC];[self.window makeKeyAndVisible];return YES; }
其實很簡單,我們只是修改了 我們的數組里面的 vc的屬性,從原來的 vc到現在的nvc(NavigationVC)。這一下子,我們就讓一個vc有了導航欄的屬性。
?
來,看看效果吧
4.看完之后,你也許就會問,1.2的差別好大呢,差別到底在哪里呢?
我們來看看 1.2m的init方法吧,對比才有好壞~
1.m
?
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {self.title = @"first";self.tabBarItem.title = @"firstView";self.tabBarItem.image = [UIImage imageNamed:@"1.png"];}return self; }
2.m
?
?
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {self.tabBarItem.title = @"secondView";// Custom initialization}return self; }看到2的時候,你覺得 為什么設置了title,卻沒有顯示呢 ?
?
就此問題,我試驗了四次,終于明白了
1)只設置一項,是不出現的。上述代碼已驗證
2)設置導航的title,只出現了導航的title。
3).設置成 self.title,都出現。
4).tabbarItem.title和image一同設置,全部出現。
5).如果我們設置了self.title,再次設置self.tabbaritem.title,就會發現兩者可以不一樣了。
3.現在就我覺得需要聲明的幾點總結一下:
i:你寫代碼加入image的時候,你會發現我們的image都是像圖示的 藍色方框,并不是我們需要的圖片,這是因為tabbarItem需要的是一個沒有背景的圖片,而我們加入的卻是有背景的。
ii:一般情況下,不要僅僅使用self.tabBarItem.title= ?@“XXX”,因為我們會發現這行代碼是不起作用的 ,要不我加入 image,要不我們再加入 self.title,這樣子我們設置的顯示才能成功。
iii:關于提示消息的提示、更新提醒.
IV:應用更新提醒
?
轉載于:https://www.cnblogs.com/riasky/p/3471284.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的[课堂实践与项目]NavigationController与TabBarController的综合使用及易错点分析(包含消息提醒,app更新)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1. 赋值运算符函数
- 下一篇: Vue利用Vue.extend()实现自