歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> iOS CoCoa編程中視圖控制器與視圖類

iOS CoCoa編程中視圖控制器與視圖類

日期:2017/3/1 10:38:45   编辑:Linux編程

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]; //這裡假定是導航欄的第一個視圖,所以不要動畫化。
    復制代碼推入時,新的視圖控制器從右方滑入屏幕(假定animated:YES)。向左指的Back後退按鈕出現,可返回到上一步,且Back按鈕用的是上一個視圖控制器的標題。
  • 作為彈出回上一級視圖控制器的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:達到目的

Copyright © Linux教程網 All Rights Reserved