UITableView使用

1.UITableView概述

    查看UITableView的幫助文檔我們會注意到UITableView有兩個Delegate分別爲:dataSource和delegate。
  dataSource是UITableViewDataSource類型,主要爲UITableView提供顯示用的數據(UITableViewCell),指定UITableViewCell支持的編輯操作類型(insert,delete和reordering),並根據用戶的操作進行相應的數據更新操作,如果數據沒有更具操作進行正確的更新,可能會導致顯示異常,甚至crash。

  delegate是UITableViewDelegate類型,主要提供一些可選的方法,用來控制tableView的選擇、指定section的頭和尾的顯示以及協助完成cell的刪除和排序等功能。

  提到UITableView,就必須的說一說NSIndexPath。UITableView聲明瞭一個NSIndexPath的類別,主要用來標識當前cell的在tableView中的位置,該類別有section和row兩個屬性,前者標識當前cell處於第幾個section中,後者代表在該section中的第幾行。


  UITableView只能有一列數據(cell),且只支持縱向滑動,當創建好的tablView第一次顯示的時候,我們需要調用其reloadData方法,強制刷新一次,從而使tableView的數據更新到最新狀態

2.UITableViewController簡介

  UITableViewController是系統提供的一個便利類,主要是爲了方便我們使用UITableView,該類生成的時候就將自身設置成了其包含的tableView的dataSource和delegate,並創建了很多代理函數的框架,爲我們大大的節省了時間,我們可以通過其tableView屬性獲取該controller內部維護的tableView對象。默認情況下使用UITableViewController創建的tableView是充滿全屏的,如果需要用到tableView是不充滿全屏的話,我們應該使用UIViewController自己創建和維護tableView。


  UITableViewController提供一個初始化函數initWithStyle:,根據需要我們可以創建Plain或者Grouped類型的tableView,當我們使用其從UIViewController繼承來的init初始化函數的時候,默認將會我們創建一個Plain類型的tableView。 


  UITableViewController默認的會在viewWillAppear的時候,清空所有選中cell,我們可以通過設置self.clearsSelectionOnViewWillAppear = NO,來禁用該功能,並在viewDidAppear中調用UIScrollView的flashScrollIndicators方法讓滾動條閃動一次,從而提示用戶該控件是可以滑動的。 

3、UITableViewCell介紹
   UITableView中顯示的每一個單元都是一個UITableViewCell對象,看文檔的話我們會發現其初始化函數initWithStyle:reuseIdentifier:比較特別,跟我們平時看到的UIView的初始化函數不同。這個主要是爲了效率考慮,因爲在tableView快速滑動的滑動的過程中,頻繁的alloc對象是比較費時的,於是引入了cell的重用機制,這個也是我們在dataSource中要重點注意的地方,用好重用機制會讓我們的tableView滑動起來更加流暢。

  我們可以通過cell的selectionStyle屬性指定cell選中時的顯示風格,以及通過accessoryType來指定cell右邊的顯示的內容,或者直接指定accessoryView來定製右邊顯示的view。 

  系統提供的UITableView也包含了四種風格的佈局,分別是:


typedef enum {
    UITableViewCellStyleDefault,
    UITableViewCellStyleValue1,
    UITableViewCellStyleValue2,
    UITableViewCellStyleSubtitle
} UITableViewCellStyle;

4.Delete & Insert

 cell的delete和insert操作大部分流程都是一樣的,當進入編輯模式的時候具體的顯示是delete還是insert取決與該cell的editingStyle的值,editStyle的定義如下:


typedef enum {
    UITableViewCellEditingStyleNone,
    UITableViewCellEditingStyleDelete,
    UITableViewCellEditingStyleInsert
} UITableViewCellEditingStyle;
  當tableView進入編輯模式以後,cell上面顯示的delete還是insert除了跟cell的editStyle有關,還與 tableView的delegate的tableView:editingStyleForRowAtIndexPath:方法的返回值有關

4、Cell的Select操作

  當我們在tableView中點擊一個cell的時候,將會調用tableView的delegate中的tableView:didSelectRowAtIndexPath:方法。

  關於tableView的cell的選中,蘋果官方有以下幾個建議:


   1、不要使用selection來表明cell的選擇狀態,而應該使用accessaryView中的checkMark或者自定義accessaryView來顯示選中狀態。 

   2、當選中一個cell的時候,你應該取消前一個cell的選中。 


   3、如果cell選中的時候,進入下一級viewCOntroller,你應該在該級菜單從navigationStack上彈出的時候,取消該cell的選中。


   5.UITableview header 和footer

           在頂部,UITableView表格可以添加header,它是UITableView上的一個可設置的屬性,它只是個UIView,你能創建任何UIView子類或用UIImageView或UILable分配並設置它們爲表格視圖的tableheader view ,然後表格視圖會安置它到你其餘的內容之上,它會隨着內容上下滾動。
         在表格視圖的內容底部,UITableView表格可以添加footer,與header一樣是UIView的任意子視圖,它是你設置的UITableView的屬性,然後表格視圖會安置它到你其餘的內容之下,在表格header和footer視圖之間的是章節內容。

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章