天天看點

iOS開發那些事--簡單表視圖

表視圖是ios開發中使用最頻繁的視圖,我們一般都會選擇以表的形式來展現資料,比如通訊錄、頻道清單等。表視圖分段、分組、索引等功能使我們所展示的資料看起來更規整更有調理,更令人興奮的是表視圖還可以利用細節展示等功能多層次的展示資料,正所謂一表勝千言。 不過,相較于其它控件表視圖的使用比較複雜,但是對比于表視圖各種靈活多變的功能,我們在使用上花費的努力還是相當值得的。

簡單表視圖

表視圖的形式靈活多變,本着由淺入深的原則,我們先從簡單表視圖開始學習。本節講的簡單表視圖是動态表,(ios 5之前全部是動态表沒有動态表和靜态表差別)。

建立簡單表視圖

在ios 5之後我們可以使用xib或者故事闆技術建立表視圖,要顯示的是一個最基本的表,我們隻需實作uitableviewdatasource協定中必須要實作的方法即可,分别是tableview:numberofrowsinsection:和tableview:cellforrowatindexpath:就可以了。:

iOS開發那些事--簡單表視圖

構造方法initwithframe:style:是在執行個體化表視圖的時候調用,如果采用xib或故事闆來設計表視圖,那麼表視圖的建立是在執行個體化表視圖控制器的時候完成的,表視圖顯示的時候會發出tableview:numberofrowsinsection:消息詢問目前節中的行數,表視圖單元格顯示的時候會發出tableview:cellforrowatindexpath:消息為單元格提供顯示資料。

我們建立一個簡單表視圖,單元格使用預設樣式,有圖示和主标題,顯示的是世界杯球隊的資訊。

iOS開發那些事--簡單表視圖

使用“single view application”模闆建立一個工程,工程名為“simpletable”,打開ib設計畫面,在“view controller scene”選中“view controller”删除控制器,然後從控件庫中拖拽一個“table view controller”到設計畫面。

iOS開發那些事--簡單表視圖

将h檔案中viewcontroller的父類從原來的uiviewcontroller修改為uitableviewcontroller。

在ib設計畫面左側的scene清單中選擇“table view controller scene” → “table view controller”, 打開表視圖控制器的辨別檢查器,在class選項裡選擇“viewcontroller”,這是我們自己的編寫視圖控制器。

iOS開發那些事--簡單表視圖

然後在scene清單中選擇“table view controller scene” → “table view controller” → “table view”, 打開表視圖的屬性檢查器。content下有兩個選項“dynamic prototypes”和“static cells”,這兩個選項隻有在故事闆中才有。“dynamic prototypes”是建構“動态表”

iOS開發那些事--簡單表視圖

如果通過代碼來實作單元格的建立,“prototype cells”項目要設為0,代碼實作的模式代碼如下:

identifier是可重用單元格辨別符,這個可重用單元格與collection視圖中的可重用單元格概念一樣。首先,在表視圖中查找是否有可以重用的單元格,如果沒有就通過initwithstyle: reuseidentifier:構造方法建立一個單元格對象。

如果要利用故事闆設計單元格,要選擇“table view controller scene” → “table view controller” → “table view” → “table view cell”,打開單元格的屬性檢查器,style下有很多選項, identifier是指可重用單元格辨別符。

iOS開發那些事--簡單表視圖

這樣操作以後在代碼部分就不需要執行個體化單元格了,我們直接通過設定的identifier取得單元格的執行個體,以此達到重用單元格的目的。

需要将viewcontroller的父類修改為uitableviewcontroller。還定義nsarray*類型的屬性listteams,listteams用來裝載從檔案中讀取的資料。讀取屬性清單檔案team.plist的操作是在viewdidload方法中實作的

iOS開發那些事--簡單表視圖

viewcontroller.m檔案的viewdidload方法代碼如下:

由于目前的這個表事實上隻有一個節,是以不需要對節進行區分,在tableview: numberofrowsinsection:方法中直接傳回listteams屬性的長度即可。tableview:cellforrowatindexpath:方法中nsindexpath參數的row方法可以獲得目前的單元格行索引。cell.accessorytype屬性是設定擴充視圖類型。

我們可以将單元格的樣式uitableviewcellstyledefault替換為其它三種,來體驗一下其它的三種單元格樣式的效果。

iOS開發那些事--簡單表視圖

簡單表案例運作結果

繼續閱讀