UITableView支持的屬性
UITableView繼承了UIScrollView,它具有UIScrollView的功能,這個UIScrollView中主要封裝了UITableViewCell單元格控件,因此,UITableView默認可以對單元格進行滾動。默認狀態下,所有的UITableViewController實例被自動設爲UIScrollView委託。
我們即可在IB中將UITableView拖入界面設計文件中添加該控件,也可通過代碼創建,兩種方式本質相同。支持屬性大致如下:
(1) Style:該屬性指定該表格的風格,它對應UITableView對象的style屬性,該屬性支持如下兩個屬性值:
1) Plain:指定該表格使用最普通的風格。
2) Grouped:指定該表格使用分組風格。
(2) Separator :該屬性指定表格行之間分隔條的樣式,可配置兩個屬性:
1) 分隔條樣式。
2) 分隔條顏色
(3) Selector:該屬性用於控制該表格的選擇風格。
(4) Editing :該屬性用於控制當表格處於編輯狀態是否允許選擇。
簡單表格
掌握上面理論後,簡單表格開發步驟如下:
(1) 在界面佈局中添加一個UITableView控件;或通過代碼創建一個UITableView對象,並將該對象添加到應用界面中。
(2) 爲UITableView設置dataSource屬性,該屬性值必須是一個實現UITableViewDataSource協議的對象。
(3) 讓指定類實現UITableViewDataSource協議,並實現協議中兩個必須實現的方法。
默認的UITableViewCell包含三個可配置的屬性。
(1) textLabel:該屬性是一個UILabel控件,代表該UITableViewCell顯示的標題。
(2) detailTextLabel:該屬性是一個UILabel控件,代表該UITableViewCell顯示的詳細內容。
(3) image:這是一個UIImage對象,代表UITableViewCell左邊的圖標。
獲取UITableView控件之後,接下來可通過如下方法訪問表格控件的表格行和分區:
(1) -cellForRowAtIndexPath:返回該表格中NSIndexPath對應的表格行。
(2) -indexPathForCell:獲取該表格中指定行對應的NSIndexPath。
(3) -indexPathForRowAtPoint:返回表格中指定點所在的NSIndexPath。
(4) -indexPathsForRowsInRect:返回表格中指定區域內所有NSIndePath組成的數組。
(5) -visibleCells:返回表格中所有可見區域內的表格行組成的數組。
(6) -indexPathForVisibleRows:返回該表格中所有課件區域內的表格行對應的NSIndexPath組成的數組。
也可以通過如下方法來控制表格控件的滾動:
(1) -scrollToRowAtIndexPath:atScrollPosition:animation:控制該表格滾動指定NSIndexPath對應的表格行的頂端、中間或下方。
(2) -scrollToNearestSelectedRowAtScrollPosition:animation:控制該表格滾動到選中表格行的頂端、中間或下方。
處理單元格的選中
當表格控件允許選中時,默認情況下,當用戶單擊表格的某個表格行時,系統就會選中對應的表格行。UITableView提供瞭如下屬性來配置表格的選中狀態。
(1) allowsSelection:該屬性控制該表格是否允許被選中。
(2) allowsMultipleSection:該屬性控制該表格是否允許多選。
(3) allowsSelectionDuringEditing:該屬性控制該表格處理編輯狀態時是否被選中。
(4) allowsMultipleSelectionDuringEditing:該屬性控制表格處理編輯狀態時是否允許多選。
除此之外,也可通過UITableView提供如下方法來操作表格中被選中的行:
(1) -indexPathForSelectionRow:獲取選中表格行對應的NSIndexPath。
(2) -indexPathForSelectionRows:獲取所有被選中表格行對應的NSIndexPath組成的數組。
(3) -selectRowAtIndexPath:animation:scrollPosition:控制該表格選中指定NSIndexPath對應的表格行,最後一個參數控制是否滾動到被選中行的頂端、中間和底部。
(4) -deselectRowAtIndexPath:animation:控制取消選中該表格中指定NSIndexPath對應的表格行。
如果程序需要響應表格行的選中事件,這時候需要藉助UITableView的委託對象,委託對象必須實現UITableViewDelegate對象——當UITableView表格行發生選中相關事件時,都會激發該委託對象的響應方法:
(1) -tableView:willSelectRowAtIndexPath:當用戶將要選中表格中的某行時激發該方法。
(2) -tableView:didSelectRowAtIndexPath:當用戶完成選中表格中的某行時激發該方法。
(3) -tableView:willDeselectRowAtIndexPath:當用戶將要取消表格中的某行時激發該方法。
(4) -tableView:didDeselectRowAtIndexPath:當用戶選中表格中的某行時激發該方法。
定製表格行
如果只是使用系統提供的UITableViewCell,UITableView控件的表格行只支持有限的樣式,而且每個表格行只包含textLabel、detailTextLabel、UIImageView這三個控件。
爲了自由定製控件的表格行,可通過如下方式完成:
(1) 繼承UITableView定製表格行。
(2) 使用動態單元格定製表格行,即直接在IB上設置。
(3) 利用xib文件定義表格行。
編輯表格
UITableView生成的表格控件功能十分靈活,不僅可作爲數據顯示控件,還支持對錶格行進行移動、刪除和插入等操作。
UITableView提供了editing屬性來判斷該表格控件是否處於編輯狀態,如果是返回YES,反之則NO。爲了切換表格控件的編輯狀態,UITableView提供了setEditing:animation:方法,如果第一個參數爲YES,則爲編輯狀態。
除此之外,控件還具有插入、刪除、移動表格行:
(1) -beginUpdates:對錶格執行多個連續的插入、刪除、移動操作前,先調用該方法開始更新。
(2) -endUpdates:當對錶格控件執行多個連續的插入、刪除移動操作後的,調用該方法提交併更新。
(3) -insertRowsAtIndexPaths:withRowAnimation:在一個或者多個NSIndexPath處插入表格行。
(4) -deleteRowsAtIndexPaths:withRowAnimation:刪除一個或多個NSIndexPath處的表格行。
(5) -moveRowsAtIndexPath:將指定NSIndexPath處的表格行移動到另一個NSIndexPath處。
(6) -insertSections:withRowAnimation:在指定NSIndexSet所包含的一個或多個分區號對應的位置插入分區。
(7) -deleteSections:withRowAnimation:刪除指定NSIndexSet所包含的一個或多個分區號對應的分區。
(8) -moveSection:toSection:將指定分區移動到另一個位置。
爲了動態編輯表格,必須實現UITableView對應的dataSource對象中的如下方法:
(1) -tableView:willBeginEditingRowAtIndexPath:開始編輯某個表格行時激發該委託對象的該方法。
(2) -tableView:didEndEditingRowAtIndexPat:當編輯完某個表格行時激發該委託對象的該方法。
(3) -tableView:editingStyleForRowAtIndexPath:該方法的返回值決定了該表格行的編輯狀態。
多分區表格以及分區索引
前面介紹的表格只有一個分區,如果希望UITableViews生成的表格控件包含更多的分區,則需要dataSource對象實現更多的方法:
(1) -numberOfSectionsInTableView:該方法的返回值決定該表格包含多少個分區。
(2) -sectionIndexFitlesForTableView:該方法的返回值用於在表格右邊建立一列浮動的索引。
(3) -tableView:titleForHeaderInsection:該方法的返回值決定指定分區的頁眉。
(4) -tabelView:titleForFooterInsection:該方法的返回值決定指定分區的頁腳。