本隨筆系列主要介紹從一個Windows平臺從事C#開發(fā)到Mac平臺蘋果開發(fā)的一系列感想和體驗歷程谤民,本系列文章是在起步階段逐步積累的,希望帶給大家更好疾宏,更真實的轉(zhuǎn)換歷程體驗张足。本篇主要開始介紹基于XCode進(jìn)行IOS程序的開發(fā),介紹其中視圖控制器的理解和使用過程灾锯。
1、視圖控制器(導(dǎo)航視圖控制器和選項卡視圖控制器)
我們知道嗅榕,在.net里面開發(fā)Winform程序或者Webform程序顺饮,我們只需要繪制一個個界面,然后在后臺添加相應(yīng)的處理凌那,如果設(shè)計比較好的話兼雄,把業(yè)務(wù)邏輯、數(shù)據(jù)庫訪問等不同的層包裝起來帽蝶,本篇不考慮業(yè)務(wù)規(guī)則這塊赦肋,主要討論界面視圖的處理。在IOS開發(fā)里面励稳,同樣也需要通過XIB設(shè)計好相關(guān)的界面佃乘,和Winform不同,IOS采用了MVC模式來設(shè)計界面和界面后臺處理操作驹尼。這個XIB只是一個界面內(nèi)容趣避,還需要一個和UI對應(yīng)的視圖控制器,視圖控制器和XIB界面內(nèi)容一起新翎,構(gòu)成了類似于Winform界面和后臺代碼的功能了程帕。
這里面比較典型的視圖就是導(dǎo)航控制器(Navigation Controller)和Tab選項卡視圖控制器(Tab Bar Controller)了住练,這兩類是屬于視圖容器類的視圖控制器,對于內(nèi)容視圖愁拭,那么就是表視圖(Table View)最為典型了讲逛。
我們知道,IOS的應(yīng)用程序岭埠,是一個單窗口的應(yīng)用盏混,它可以有很多視圖在上面,而管理各種視圖枫攀,就可以通過各種視圖控制器進(jìn)行展示了括饶。如對于導(dǎo)航控制器,我們可以理解為它除了一個導(dǎo)航條外来涨,其他部分為空的視圖图焰,這些空白的地方,可以用來放置其他子視圖模塊蹦掐,它們通過導(dǎo)航條進(jìn)行導(dǎo)航技羔,非常方便。下面圖例是這個視圖控制器的說明圖卧抗。
通過這個視圖控制器藤滥,我們可以在導(dǎo)航條里面放置一些返回按鈕(或者自定義的一些功能),如下所示
而Tab Bar Controller我們就很熟悉了社裆,它有點類似在.NET的Winform開發(fā)里面的TabControl控件拙绊,它里面還需要放置一些特殊的內(nèi)容才能組合成實際的界面。
選項卡視圖里面和導(dǎo)航視圖控制器一樣泳秀,除了選項卡底部有一排按鈕方便切換視圖外标沪,其他部分是空白的,空白的地方一般還需要放置一些視圖控制器嗜傅,比較典型的一個例子就是IOS里面的世界時鐘的程序金句,它是由選項卡視圖控制器,導(dǎo)航視圖控制器以及一些其他的視圖進(jìn)行組合起來的吕嘀,它們的分解圖如下所示违寞。
2、視圖控制器的應(yīng)用例子
我為了詳細(xì)了解上面所說的兩個視圖控制器偶房,我做了一個例子趁曼,界面如下所示,雖然簡單棕洋,但是我們可以從中了解到這兩個視圖控制器的使用彰阴。
這個例子里面使用了上面所說的兩個視圖控制器,首先外部是一個選項卡視圖控制器拍冠,然后第一個視圖里面尿这,用了導(dǎo)航視圖控制器簇抵,導(dǎo)航視圖控制器里面還可以放置幾個視圖,選項卡第二個視圖放了一個普通的視圖即可射众。
為了在程序啟動的時候?qū)Τ绦虻囊晥D界面進(jìn)行初始化碟摆,我們需要添加一些代碼構(gòu)建幾個不同的視圖容器,如下所示叨橱。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
LoginViewController *loginviewController = [[LoginViewController alloc]init];
loginviewController.title = @"用戶中心";
self.navigationController = [[UINavigationController alloc]init];
EbookStyleViewController *bookStyleController = [[EbookStyleViewController alloc]init];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStyleBordered target:nil action:nil];
bookStyleController.title = @"書籍類別";
bookStyleController.navigationItem.backBarButtonItem = backButton;
[self.navigationController pushViewController:bookStyleController animated:NO];
self.tabBarController = [[UITabBarController alloc]init];
self.tabBarController.viewControllers = @[self.navigationController, loginviewController];
[self.window addSubview:self.tabBarController.view];
[self.window makeKeyAndVisible];
return YES;
}
其中LoginviewController和 UINavigationController 是同一個級別的(而EbookStyleViewController作為導(dǎo)航視圖控制器的第一個視圖)典蜕,這樣LoginviewController和 UINavigationController 他們就放到了TabBarController里面了。程序外觀上我們好像看到是EbookStyleViewController和LoginviewController兩個視圖罗洗。
self.tabBarController = [[UITabBarController alloc]init];
self.tabBarController.viewControllers = @[self.navigationController, loginviewController];
為了更改視圖導(dǎo)航控制器的外觀顯示愉舔,我們需要在EbookStyleViewController視圖里面進(jìn)行一些設(shè)置處理,如標(biāo)題和按鈕的處理伙菜。
- (void)viewDidLoad
{
UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]initWithTitle:@"查詢" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.leftBarButtonItem = leftButton;
UITabBarItem *item = [[UITabBarItem alloc]initWithTitle:@"書籍類別" image:[UIImage imageNamed:@"bookcase.png"] tag:0];
self.tabBarItem = item;
[super viewDidLoad];
}
增加一個查詢按鈕轩缤,以及修改標(biāo)題為“書籍類別”,界面運(yùn)行后看到的界面如下所示贩绕。
為了通過視圖控制器進(jìn)入其他視圖火的,我們可以通過下面代碼進(jìn)行切換即可。通過按鈕的事件進(jìn)行觸發(fā)到第二個視圖淑倾。
- (IBAction)selctStyle:(id)sender;
{
EbookNameViewController *ebookNameController = [[EbookNameViewController alloc]init];
ebookNameController.title = @"歷史類書籍";
ebookNameController.strStyle = @"歷史";
[self.navigationController pushViewController:ebookNameController animated:YES];
}
以上就是結(jié)合兩個視圖控制器進(jìn)行的介紹馏鹤,希望大家對理解這兩個視圖控制器有所幫助。我們使用IOS就可以看到娇哆,為了較好的體驗湃累,很多程序都需要使用這兩個視圖控制器進(jìn)行界面的布局排版,因此碍讨,合理運(yùn)用這兩個東西治力,應(yīng)該是非常有幫助的。