UISplitViewController - iPad分屏視圖控制器

UISplitViewController - 分屏視圖控制器

概述

UISplitViewController 是一個容器vc, 展現一個 master-detail(主-詳(從))界面。 
主視圖改變會驅動從視圖的改變。兩個視圖可用同時展現,也能夠只顯示一個。當建立app界面的時候,UISplitViewController一般是root vc ,它沒有本身的元素可展現,它展現的是它的子vc,可經過屬viewControllers來設置。數組

主要屬性及方法

preferredDisplayMode: UISplitViewControllerDisplayMode -分隔視圖的指望展現方式 
經過此屬性來設置splitViewController的展現方式。splitViewController會盡力以你設置的方式展現,若是沒有足夠的空間,會用一個不一樣類型的界面展現。改變此屬性,splitViewController將動態的改變如今的展現模式。 
支持四中展現模式:app

enum UISplitViewControllerDisplayMode : Int {
    //自適應模式,splitViewController會爲可用空間選用合適的展現視圖方式,在ipad的豎直方向會用.PrimaryOverlay模式展現視圖,在iPad水平方向將會用.AllVisible 模式展現。
    case Automatic
    //主視圖隱藏
    case PrimaryHidden
    //主詳視圖都顯示
    case AllVisible
    //主視圖部分覆蓋詳細視圖
    case PrimaryOverlay
}

 

  • diplayModeButtonItem: UIBarButtonItem - 改變分隔視圖顯示模式的按鈕

若是想顯示的更改分隔視圖的顯示模式,那麼在界面中應該包含這個按鈕。點擊此按鈕,經過deletage的方法 
targetDisplayModeForActionInSplitViewController:最後返回的值來改變分隔視圖的顯示模式。iphone

 func targetDisplayModeForActionInSplitViewController(svc: UISplitViewController)    -> UISplitViewControllerDisplayMode {
        return UISplitViewControllerDisplayMode.Automatic
    }

 

 

presentsWithGesture: Bool - 指定一個隱藏的視圖控制器是否可使用一個滑動手勢來呈現和退出。ide

此屬性針對iphone6s plus橫屏及ipad有效,便是針對 size class 爲(w:Regular)或則(height:Regular)的狀況。當它的屬性爲true的時候,splitViewController 會添加一個手勢識別器,經過delegete的方法targetDisplayModeForActionInSplitViewController返回的顯示模式,來改變splitViewController的當前顯示模式。若是設置爲false則手勢無效。ui

self.presentsWithGesture = true
    self.delegate = self

    //代理方法,手勢滑動改變顯示模式
    func targetDisplayModeForActionInSplitViewController(svc: UISplitViewController) -> UISplitViewControllerDisplayMode {

        //返回此模式,主從視圖同時顯示,滑動手勢無效。
        return UISplitViewControllerDisplayMode.AllVisible
        //主視圖隱藏,隱藏以後iPad沒法再顯示,iphone6s plus轉到橫屏,不受此屬性約束,能夠再顯        示。
        return UISplitViewControllerDisplayMode.PrimaryHidden

        //主視圖覆蓋從視圖
        return UISplitViewControllerDisplayMode.PrimaryOverlay
        //根據設備尺寸和類型自適應
        return UISplitViewControllerDisplayMode.Automatic
    }

 

 

  • 這裏寫圖片描述 

禁用手勢的狀況以下: 
這裏寫圖片描述spa

viewControllers: [ UIViewController ] - 管理的視圖控制器代理

當分隔視圖界面展開的時候,此屬性包括兩個vc,當它摺疊的時候,此屬性包含一個vc。 數組中第一個元素稱爲 
primary(或 master)vc, 若是第二個元素呈現,那麼它稱爲secondary(或 detail)vc。 
能夠用此屬性初始化splitViewController,但當splitViewController已經顯示的時候,最好用 showDetailViewController:sender:或者showViewController:sender:來設置子vc。code

 override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        //從 storyboard初始化一個vc
        let vc  = storyboard?.instantiateViewControllerWithIdentifier("detailVC") as! DetailViewController
        vc.selectedIndex = 400

        self.showDetailViewController(vc, sender: self )
    }

 

 

– showDetailViewController:sender: - 顯示詳細視圖 
此方法會調用delegate的方法 splitViewController:showDetailViewController:sender:,給delegate一個顯示vc的機會。若是delegate不想顯示,那麼 splitViewController會向前發送消息到將要被替換的vc,看看這個vc有什麼要作的。例如:導航控制器會把vc放入它的導航棧中。若是沒有任何對象想顯示vc,那麼splitViewController按照以下方法安排vc的顯示:對象

  • 在水平正常環境(w:Regular), vc做爲detail vc展現。
  • 在水平緊湊環境(w:Compact),vc以modally方式展現。

delegate: UISplitViewControllerDelegate? - 代理blog

協議定義了一個方法可讓你管理一個拆分視圖界面的變化。使用此協議的方法來響應當前顯示模式和當前界面方向的變化。當拆分視圖界面摺疊和展開時,或當一個新的視圖控制器被添加到界面時,您還可使用這些方法來適當地配置子視圖控制器。

主要方法以下:

//當視圖轉換到摺疊模式,一般只顯示主視圖,經過此方法能夠定製主視圖。    
fun primaryViewControllerForCollapsingSplitViewController(splitViewController: UISplitViewController) -> UIViewController? {

        return nil
    }

    //視圖轉換爲摺疊模式,可用實現此方法爲主視圖進行一些處理,或者嘗試把詳細視圖的內容包含進新的摺疊視圖。此方法會回後,splitViewController會把詳細視圖vc從 ‘viewControllers’ 屬性中移除。
    返回false表示splitViewController採用默認的方式嘗試在摺疊視圖中包含 ‘detail vc’,同時也會調用 master vc 的方法‘collapseSecondaryViewController:forSplitViewController:’對 ‘detail vc’對內容作一些處理,大部分控制器什麼也不作,但當是‘UINavigationController’對時候會把
 ‘detail vc’放入到導航堆棧中。 返回true,表示什麼也不作。

    func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {


        return true
    }

    //當從水平緊湊變爲水平正常模式時,調用此方法返回主控制器用來顯示,可用返回特定的vc,若是返回nil將使用當前的主控制器。
    func primaryViewControllerForExpandingSplitViewController(splitViewController: UISplitViewController) -> UIViewController? {

        return nil
    }
   //爲拆分視圖返回詳細視圖控制器,若是返回爲nil,splitViewController將會調用主控制的方法:
   separateSecondaryViewControllerForSplitViewController:來返回一個合適的vc,大部分控制器默認什麼也不作,但當是UINavigationController的時候會返回導航棧頂端的元素。

    func splitViewController(splitViewController: UISplitViewController, separateSecondaryViewControllerFromPrimaryViewController primaryViewController: UIViewController) -> UIViewController? {

        return nil

    }
相關文章
相關標籤/搜索