iOS7應用開發六:UINavigation, UITabbar控制器的多態性

tags:    時間:2014-05-04 18:59:46
iOS7應用開發6:UINavigation, UITabbar控制器的多態性

1、前期所實現的PlayingCard遊戲,其View Controller只能適應PlayingCard這一種遊戲規則。而將createDeck函數修改為返回一個nil后,整個View Controller與PlayingCard就沒有關係了(同時也就沒法運行了),成為了一種抽象的概念(類似於C++中的抽象類),實際的控制器必須 派生這個類才能實現自身的功能。

新建一個View Controller類,並實現createDeck方法。此時build工程,無法正常運行。因為當前storyboard關聯的依然是那個抽象類。

修改方法:在storyboard最下一欄中選擇View Controller,然後在右側identity inspector(就是右側欄頂部左起第三個標籤),在Class一欄中改為派生類即可。如下圖所示:

 

2、多MVC:

#如何創建:在控制項庫中拖出一個新的View Controller到storyboard中;新建一個視圖控制器類;參考1的方法將storyboard於視圖控制器類綁定;

#如何顯示多MVC:使用UINavigationController和UITabBarController,這兩類的特點是他們的「view」可以是另一個視圖控制器;

 

3、導航控制器UINavigationController:

#適用場合:需要顯示多級信息的時候;

# 組成元素:導航欄(上面的內容由所VC包含的MVC的navigationItem決定);標題(也是由包含的MVC的title決定);導航欄右側按鍵 (由包含的MVC的rightBarButtonItem決定)和返回鍵;地步的工具欄(由包含的MVC的toolBarItems決定);

#segue:由一個MVC進入到另一個MVC的機制,也可以認為是場景切換的機制。

#使用方法:在storyboard中拖入另一個view controller,在前一個viewcontroller的按鈕等控制項中ctrl+拖動指向第二個viewcontroller,這樣就建立起了 segue關係。隨後選擇根視圖控制器,將其植入navigation controller中(editor->embed in->navigation controller);

#個性化定義:雙擊指定子MVC的標題(title);可以在控制項庫中選擇UIBarButtonItem添加到導航欄作為右側按鈕;

#場景切換的函數:

1、準備相關的信息:-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;

2、確定切換是否執行:-(BOOL)shouldPerformSegueWithIdentifier:(NSString *) identifier sender:(id)sender;返回NO則不進行切換;不常用;

3、通信方式:在源ViewController中實現prepareForSegue,則可以獲得segue.destinationViewController,這樣就可對目標ViewController進行操作;

#通過代碼來創建導航控制器

1、創建一個ViewController類,命名為RootViewController;在AppDelegate.m中引用其頭文件;

2、創建根視圖控制器和導航控制器;

3、將導航控制器設為根控制器;完成後的didFinishLaunchingWithOptions如下:

- (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];     [self.window makeKeyAndVisible];          //創建根視圖控制器     RootViewController *rootViewController = [[RootViewController alloc] init];     //創建導航控制器     UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];     //將導航控制器設為根控制器     self.window.rootViewController = navigationController;       return YES; }
然後運行就會發現根視圖出現在了導航控制器開始的位置。

 

4、添加視圖切換的功能:首先在根視圖中添加控制項,用於控制顯示下一個視圖控制器,方法是重寫loadView:

-(void) loadView {     UIView *baseView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];     self.view = baseView;     baseView.backgroundColor = [UIColor greenColor];          UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];     [button setTitle:@"Push" forState:UIControlStateNormal];     [button setTintColor:[UIColor whiteColor]];     [button setFrame:CGRectMake(90, 200, 140, 35)];     [button setBackgroundColor:[UIColor purpleColor]];     [button addTarget:self action:@selector(push) forControlEvents:UIControlEventTouchUpInside];     [self.view addSubview:button]; }

 

在控制項的響應函數中,新建並初始化第二個ViewController,並將其push到導航控制器中。


至此,在第一個視圖中點擊push按鈕,導航欄就會進入第二個視圖控制器中。需要注意的是,一個導航控制器所控制的多個視圖控制器,每一個都可以用

self.navigationController的方法獲取到導航控制器;導航欄(NavigationBar)和工具欄(ToolBar)屬於導航控制器,但是上面的元素屬於各個子視圖控制器;

在第二個視圖控制器中可以添加返回功能,很簡單,讓self.navigationController彈出即可

[self.navigationController popViewControllerAnimated:YES];

 

 


除了這個基本函數之外,還可以返回至根視圖等,詳細可見文檔。

 

4觸控欄UITabBarController

#觸控欄所包含的各個視圖控制器是平級關係,不存在前後級的關係;具體的使用方法與導航控制器類似,需要時再詳述。

 

原文:http://blog.csdn.net/shaqoneal/article/details/16831349

 

推薦閱讀文章

Bookmark the permalink ,來源:互聯網