天天看點

iOS7應用開發11:清單視圖TableView、iPad應用

1、清單視圖TableView

用于在一個一維的清單中顯示資料的方法,是滾動條視圖的派生來;有動态和靜态兩種類型,也可以設定為plain和grouped兩種風格;通過data source和delegate來設定不同的顯示資料和表格屬性。

TableView的組成:清單頭table header,分段section,清單尾table footer;每一個section由一個section header、一個section footer和若幹個table cell組成,每個cell是一個UIView執行個體。

Cell的類型:包括基本、子标題、細節(左/右)等;

通常配合TableView Controller使用:一個UITableViewController的view成員即是一個TableView;步驟:(1)建立一個類繼承自UITableViewController;(2)向storyboard中拖入一個TableViewController,class改為剛剛建立的類;(3)在建立類中實作delegate和data source的方法,控制清單的類型和顯示資料。

靜态清單:直接在storyboard中進行設計;表格在程式運作過程中不會動态加載,是以不需要實作delegate和data source方法;

在storyboard中可以可視化設定清單視圖cell的各種屬性,如下圖所示:

iOS7應用開發11:清單視圖TableView、iPad應用

關鍵協定:data source和delegate;UIViewController自動将其delegate和data source設定為self,若向ViewController中手動添加一個tableView,則必須手動設定。

(1)delegate:控制清單的屬性、顯示的方式等;

選中某一行:

響應提示按鈕(i)

(2)data source:控制清單中顯示什麼資料;

指定顯示的cell:

指定分段的數目(預設為1):

指定每個section的cell個數:

關于UITableView

UITableView的segue方法:在清單中的某一進制素被點選後,如何跳轉到下一個頁面;

重新整理滾輪:首先在UITableViewController中将refreshing從disabled改為enabled,并ctrl+拖入視圖控制器中作為IBAction,在生産的函數中按需調用beginRefreshing和endRefreshing方法。

重新載入資料:調用reloadData在model發生變化的時候将其重新載入;調用reloadRowsAtIndexPaths:重新載入部分資料;

2、通用工程:可以适用于iPhone和iPad的應用

單一的應用,采用了兩個storyboard,是以可以自适應與兩種不同裝置;

iPad界面的風格:Split View和Popover;

如何檢測目前裝置?

(1)采用以下方法:

(2)檢測是否存在split view或者popover,或者檢測目前界面是否存在其他MVC。

UISplitViewController:由一個Master View Controller和一個Detailed View Controller構成;應處于一個storyboard的頂層,其内部可以添加navigation controller或tabbar controller。

擷取Master View Controller和一個Detailed View Controller的方法:

UISplitViewController中的每一個視圖控制器均存在一個屬性指向UISplitViewController對象:

UISplitViewController對象中存在一個NSArray儲存Master和Detailed視圖控制器,分别儲存于下标0和1位置;

在Master ViewController中選擇不同的選項後更新Detailed ViewController:Target/Action方式或者Segue到另一個ViewController;

UISplitViewControllerDelegate:盡可能早地設定view controller的代理,如在awakeFromNib中。

該代理的功能:設定在水準和垂直模式下,Master View是否隐藏,以及設定顯示Master View的按鈕的屬性。

Popover:UIPopoverController不是繼承自UIViewController,而在其中有一個UIViewController屬性:

在storyboard中建立Popover Segue:

在prepareForSegue中,判斷segue參數是否滿足isKindOf: UIStoryboardPopoverSegue,并在 UIStoryboardPopoverSegue的UIPopoverController屬性中擷取視圖控制器。

繼續閱讀