iPhone編程規則是:一個窗口,多個視圖。UIView是iPhone屏幕上很多控件的基礎類。每個iPhone用戶界面都是由顯示在UIWindow(這其實也是個特殊的UIView)內的眾多UIView及其專門化子類構建的。
顯示數據的視圖:
可選擇的視圖(以下兩個視圖類實例都是模態顯示的):
所有控件(控件是將用戶觸摸轉換為回調觸發器的屏幕對象。):
表格和拾取器:
各種欄樣式:
在所有iPhone欄樣式視圖中,只有UIToolBar類可以直接使用。其它三個都是通過對應的控制器類來完成工作,而不是直接構建和管理視圖。
進度與活動:
控制器類
UIViewController類
UIViewController負責創建其管理的視圖及在低內存的時候將它們從內存中移除。還為標准的系統行為進行響應。從語法上說,UIViewController是視圖控制器的父類。視圖控制器類是沒有可視化表示的抽象類,只有它管理的視圖才提供可視畫布。記住:1. 視窗UIWindow雖然也是UIView,但不能用處理普通UIView的方式來設置; 2. UIView視圖使用initWithFrame:初始化,而其UIViewController則使用init類方法直接初始化。3. UIViewController實例負責設置視圖的外觀和它顯示的子視圖。
UINavigationController類
1.導航控制器使用內置動畫在視圖之間切換; 2. 導航控制器自動構建並處理Back按鈕; 3. 導航控制器提供簡單的菜單欄可幫助用戶進行自定義控件。4. 每一個導航控制器都擁有一個根視圖控制器RootViewController,它是“導航彈出棧”的基礎,是根。5. 通過調用initWithRootViewController:方法可以將特定控制器設置為根。如常見的:
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[[MyViewController alloc] init]];
[window addSubview:nav.view];
UINavigationController如何推入和彈出視圖控制器?
//創建一個導航控制器復制代碼推入時,新的視圖控制器從右方滑入屏幕(假定animated:YES)。向左指的Back後退按鈕出現,可返回到上一步,且Back按鈕用的是上一個視圖控制器的標題。
UINavigationController *aNav = [[UINavigationController alloc] init];
//創建一個要被推入的視圖控制器,然後添加此視圖控制器到導航欄並予以顯示
UIViewController *aView = [[UIViewController alloc] initWithNibName:(*xib文件名*)];
[aNav pushViewController:aView animated:NO]; //這裡假定是導航欄的第一個視圖,所以不要動畫化。
導航欄可以通過直接訪問navigationBar屬性,改變欄的風格或者它的顏色:
self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
提示:UIViewController有一個屬性是navigationController,如果當前ViewController在某個NavigationController的堆棧中的話(即是被推送過來的),則視圖控制器的這個屬性就指向那個NavigationController,否則為nil。
要添加或修改導航欄按鈕,使用UINavigationItem抽象類。其描述了導航欄上顯示的內容,而正好UIViewController另有一導航項屬性navigationItem包括左欄按鈕(leftBarButtonItem)、右欄按鈕(rightBarButtonItem)和欄標題(title)、用於顯示標題的視圖(titleView),以及用於從當前視圖向後導航的Back按鈕(backBarButtonItem)和隱藏後退按鈕(hidesBackButton)。
注意:對於導航欄定制,對定制實際標題的最簡單方式時使用子視圖控制器而不是導航項的title屬性:
self.title = @"Hello";
self.title = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]; //可使標題自動反映運行的應用程序名稱
導航控制器加載模態視圖控制器:
通常情況下,模態視圖控制器用於選取數據。在發送presentModalViewController: animated:消息後,一個新的視圖控制器(其實是個ModalViewController)會滑動到屏幕並掌握控制權,直到使用dismissModalViewControllerAnimated:將它隱藏才重新得到控制權。
對於導航控制器來說,viewWillAppear方法是沒有結果的,要實現UINavigationControllerDelegate委托方法willShowViewController: animated:達到目的。