前面有一篇博文iOS學習之Tab Bar的使用和視圖切換 這是在AppDelegate裡使用Tabbar,這樣的程式開啟就是TabbarView了,有時候我們需要給程式做一些協助頁面,或者登入頁面,之後才跳轉到tabbar View裡,或者後面的頁面才使用Tabbar的,那這樣怎麼實現呢?
我們建立一個視圖,然後在這個視圖通過[selfpresentModalViewController : tabBaranimated:YES];跳轉來實現。
當程式中需要在多個View直接切換的時候,可以使用 UINavigationController,也可以用 ModalViewController。UINabigationController 是通過導航條來切換多個 view。而如果 view 的數量比較少,且顯示領域為全屏的時候,用 ModalViewController 就比較合適(比如需要使用者輸入資訊的view,結束後自動回複到之前的view)
1、建立一個Single View app,按Command + N建立三個ViewController ,都選上.xib檔案。
1.1 建立的Controller分別是:TestOneController TestTwoController TestThirdViewController ,他們都繼承UIViewController。
單擊xib檔案,在.xib檔案的屬性視窗裡修改View的顏色,這樣好在切換頁面的時候區分出來是切換了頁面。
好吧,我的ThirdViewController沒有xib,可能是漏了,不過也沒關係,一樣能用。
1.2 添加TabBarViewController
最重要的是再添加一個TabBarViewController,這個需要繼承的UITabBarController
2、在ViewController也就是程式進來的第一個頁面。在這裡添加一個跳轉的Button,並加上Action,然後在Action裡實現跳轉到tabbar.
ViewController.m裡實現代碼。這就跳轉,把剛才建立的三個ViewController都添加到Tabbar裡
- (IBAction)gotoTabbarVIew:(id)sender { NSMutableArray *items = [[NSMutableArray alloc] init]; TestOneController *testOne1 = [[TestOneController alloc] init]; [items addObject:testOne1]; TestTwoController *twoController = [[TestTwoController alloc] init]; [items addObject:twoController]; TestThirdViewController *thirdController = [[TestThirdViewController alloc] init]; [items addObject:thirdController]; // items是數組,每個成員都是UIViewController TabBarViewController *tabBar = [[TabBarViewController alloc] init]; [tabBar setTitle:@"TabBarController"]; [tabBar setViewControllers:items]; [self presentModalViewController : tabBar animated:YES];}
這樣運行跳轉到TabbarView裡的了,但是現在的tabbarView裡面的三個Tab 按鈕都空白的黑色。怎麼添加表徵圖和其他樣式呢?
3、添加UITabBarItem
在三個ViewController.m檔案裡添加對應的UITabBarItem,代碼如下
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { UITabBarItem *item = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemMostRecent tag:1]; self.tabBarItem = item; self.tabBarItem.badgeValue = [NSString stringWithFormat:@"%d",9]; } return self;}
UITabBarSystemItemMostRecent這個item的風格常量,可以根據喜好改變。除此之外還可以用自訂的圖片做為item。這裡就不示範自己添加圖片的方式了。
self.tabBarItem.badgeValue 這個在tabbar item上顯示泡泡的數字。
對應的其他ViewController都添加上,tag寫不同的數字,後面要用到的。現在運行就有效果了
切換
4、監聽Item的點擊事件
Tabbar有了,怎麼監聽你點了哪個item呢?
實現UITabBarDelegate。在apple的文檔裡查了一下,實現
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item這個方法即可監聽
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{ if(item.tag == 1){ NSLog(@"TestOneController"); }else if(item.tag == 2){ NSLog(@"TestTwoController"); }else { NSLog(@"TestThirdController"); }}
通過tag判斷,運行切換:列印log。
2012-06-28 20:56:19.144 View2TaBBarView[5614:f803] TestTwoController2012-06-28 20:56:19.785 View2TaBBarView[5614:f803] TestThirdController2012-06-28 20:56:20.363 View2TaBBarView[5614:f803] TestTwoController2012-06-28 20:56:20.843 View2TaBBarView[5614:f803] TestOneController
5、返回上個頁面
通過 [self.parentViewControllerdismissModalViewControllerAnimated:YES]; 返回上個頁面
在ThirdView添加一個button。添加Action事件。代碼如下:
-(void)backAction:(id)sender{ [self.parentViewController dismissModalViewControllerAnimated:YES]; }- (void)viewDidLoad{ [super viewDidLoad]; [self.view setBackgroundColor:[UIColor brownColor]]; UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(40, 50, 60, 30)]; [button setTitle:@"返回" forState:UIControlStateNormal]; [button addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button];// Do any additional setup after loading the view.}
運行,點返回button,返回了第一個頁面了:
例子的代碼:http://download.csdn.net/detail/totogo2010/4399715
著作權聲明:本文由http://blog.csdn.net/totogo2010/原創,歡迎轉載分享。請尊重作者勞動,轉載時保留該聲明和作者部落格連結,謝謝!