Objective-C 學習記錄
1.UINavigationController導航控制器的建立 UINavigationController是一種特殊的控制器,用於管理多控制器之間的跳轉,常見的例子是iPhone的設定
UINavigationController的使用步驟: (1).初始化UINavigationController (2).設定UIWindow的rootViewController根控制器為UINavigationController (3).根據具體情況,通過pushViewController方法新增對應個數的子控制器,注意不能同時將同一個控制器push兩次 例:在AppDelegate的didFinishLaunchingWithOptions:方法中新增程式碼:
//建立視窗 self.Window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; //設定視窗的根控制器 UIViewController *VC = [[UIViewController alloc] init]; //初始化UINavigationController UINavigationController *NAVC = [[UINavigationController alloc] init]; //將一個控制器新增到導航控制器中, [NAVC pushViewController:VC animated:YES]; //也可以使用initWithRootViewController初始化 //UINavigationController *NAVC = [[UINavigationController alloc] initWithRootViewController:VC]; //顯示視窗 [self.window makeKeyAndVisible]; return YES;
2.UINavigationController導航控制器的跳轉和使用 常用方法和屬性:
//UINavigationContoller以棧的形式儲存子控制器 @property (nonatomic, copy) NSArray *viewControllers; @property (nonatomic, readonly) NSArray *childViewControllers; //使用push方法(pushViewController)將控制器壓入棧 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; //pop方法可以移除控制器 //移除棧頂的控制器 - (UIViewController *)popViewControllerAnimated:(BOOL)animated; //回到指定的子控制器(必須已經是navigationController的子控制器) - (NSArray *)popToViewController:(UIViewContoller *)viewController animated:(BOOL)animated; //回到根控制器 - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
注意: (1).UINavigationController將子控制器以棧的形式儲存在childViewController這個陣列中,每次使用push方法即往棧中壓入一個控制器,使用pop方法則推出一個或多個控制器,而螢幕顯示的是當前處於棧頂的控制器。 (2).當跳轉到某個控制器時,實質上就是推出在這個控制器之前的其他控制器,使要顯示的控制器位於棧頂。 (3).當一個控制器被新增到導航控制器中時,控制器就會多一個navigationController屬性(self.navigationController),此時可以通過訪問這個屬性實現導航控制器的功能。 (4).沒有特殊的自定義操作時,當push到下一個頁面後,左上角會出現系統預設的<Back返回按鈕,其作用相當於popViewController
下圖是UINavigationController跳轉方法(push和pop):
下圖是UINavigationController控制器管理和顯示:
例:先建立三個控制器類:RootViewController、SecondViewController,在RootViewController中設定一個按鈕pushVC 在pushVC按鈕的點選事件中新增程式碼:
- (IBAction)pushVC:(id)sender
{
SecondViewController *SVC = [[SecondViewController alloc] init];
[self.navigationController pushViewController:SVC animated:YES];
}
導航控制器中控制器的跳轉關係: