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視圖之間的是章節內容。