1. 程式人生 > >Objective-C 學習記錄

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];
}

導航控制器中控制器的跳轉關係: