iPhone編程規則是:一個窗口,多個視圖。UIView是iPhone屏幕上很多控件的基礎類。每個iPhone用戶界面都是由顯示在UIWindow(這其實也是個特殊的UIView)內的衆多UIView及其專門化子類構建的。
顯示數據的視圖:
- UITextView
- UILabel
- UIImageView
- UIWebView
- MKMapViews
- UIScrollView
可選擇的視圖(以下兩個視圖類實例都是模態顯示的):
- UIAlertView
- UIActionSheet
所有控件(控件是將用戶觸摸轉換爲回調觸發器的屏幕對象。):
- UIButton
- UISegmentedControl
- UISwitch
- UISlider
- UIPageControl
- UITextField
表格和拾取器:
- UITableView (對於表格的行有一個UITableViewCell類的表格單元項)
- UIPickerView
各種欄樣式:
- UINavigationBar (對於導航欄有一個UINavigationItem類的導航項)
- UITabBar
- UISearchBar
- UIToolBar
在所有iPhone欄樣式視圖中,只有UIToolBar類可以直接使用。其它三個都是通過對應的控制器類來完成工作,而不是直接構建和管理視圖。
進度與活動:
- UIActivityIndicatorView
- UIProgressView
控制器類
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如何推入和彈出視圖控制器?
- 使用pushViewController:animated:可推入一個新的控制器,從而增加新的項到導航棧。(記住:導航欄控制器不添加一個視圖進去,這個導航欄是沒有意義的!)
//創建一個導航控制器 UINavigationController *aNav = [[UINavigationController alloc] init]; //創建一個要被推入的視圖控制器,然後添加此視圖控制器到導航欄並予以顯示 UIViewController *aView = [[UIViewController alloc] initWithNibName:(*xib文件名*)]; [aNav pushViewController:aView animated:NO]; //這裏假定是導航欄的第一個視圖,所以不要動畫化。
- 作爲彈出回上一級視圖控制器的Back按鈕是自動產生並處理的,無需用戶干預。
- 可使用popViewControllerAnimated:BOOL彈出當前視圖控制器並向左顯示前一個視圖。
- 可使用popToViewController:animated:彈出到指定的視圖控制器,即不一定是上一個。
- 可使用popToRootViewControllerAnimated:BOOL直接彈出到根視圖控制器。
- 設置導航欄的按鈕並不是去設置導航欄本身。一切都是在被推入的UIViewController子類內部執行推入請求和相關導航欄的定製(如:右鍵按鈕)。
導航欄可以通過直接訪問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:達到目的。