UITableView---IOS開發的常用控制項使用總結

來源:互聯網
上載者:User

標籤:style   http   io   ar   os   使用   sp   for   on   

        UITableView是IOS中非常常見的一個控制項,主要用來進行列表內容的展示.有兩個預設的內建風格: UITableViewStylePlain和UITableViewStyleGrouped.其中UITableViewStyleGrouped允許將列表中的內容進行分組.UITableViewController是專用於UITableView的視圖控制器,提供了一系列的方法來對UITableView進行建立和維護.

        UITableViewController必須繼承兩個協議:

1, 通過UITableViewDataSource向UITableView提供資料,向每一個單元格cell進行內容的填充.

2, 通過UITableViewDelegate來處理對於每一個單元格cell的選擇事件(如點擊選取等).

        常見的注意事項大概如下:

1, 建立UITableViewController子類,並使其繼承UITableViewDataSource和UITableViewDelegate協議.

2, 通過storyboard建立UITableView,並將其dataSource和delegate都指向該UITableViewController對象

(storyboard中右鍵點擊UITableView對象,選取並連線即可).

3, 對該UITableView,必須要重寫至少兩個方法,

        func tableView(table: UITableView, numberOfRowsInSection section: Int) -> Int {   }

        該方法返回tableView中呈現的單元格個數,如return self.products.count

        func tableView(table: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

                let cell = UITableViewCell(style: UITableViewCellStyle.SubTitle, reuseIdentifier: "myCell")

                cell.textLabel.text = self.products[indexPath.row][‘title‘] as? String

                return cell

        }

        該方法用於描述每一個單元格cell的樣式及其中填充的資料,然後返回該cell. 

        每一個cell的基本樣式可以通過Identifier來預先設定,如Basic, Subtitle等基本類型, 也可以設定自訂類型myCell.

        let cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Basic", forIndexPath: indexPath) as UITableViewCell

        該方法從tableView的單元格隊列中取出一個cell進行重用.

4, 除了以上兩個必須重寫的方法之外,設定選取每個cell對應的執行操作,可以通過以下方法,

        func tableView(tableView: UITableView, didSelectRowAtIndex indexPath: NSIndexPath!) { self.didChooseItem(indexPath.row) }

        該方法專用於選取cell時執行的操作.

        func tableView(tableView: UITableView!, willDisplayCell cell: UITableViewCell!, forRowAtIndexPath indexPath: NSIndexPath!) { }

        該方法是在呈現選取該cell時執行的操作,如顯示一個警告或者動畫.

5, delegate的用法.

        delegate的思想其實很有意思,一個對象做不到的行為,可以給其設定一個代理對象,而代理對象可以代替其完成該行為.

        在UITableView中的使用非常常見.比如從網路中擷取資料來填充tableView,我們可以將擷取網路資料的操作onRequest封裝在一個HttpController的類中.則擷取的資料是跟HttpController的對象綁定在一起的.而我們希望可以直接拿來傳遞給tableViewController,而不用通過HttpController對象將資料傳遞給tableViewController.

        首先,在HttpController中定義一個協議,

        protocol HttpProtocol {

                func parseResults(results: NSDictionary)

        }

        然後,將tableViewController類繼承該HttpProtocol協議,並定義parseResults(results: NSDictionary)的函數體.

        接下來,在tableViewController中定義一個HttpController對象,並指定該httpCtl的delegate對象就是該tableViewController自身.

        var httpCtl: HttpController = HttpController()

        httpCtl.delegate = self

        // 這一步對應的是 HttpController類中要定義一個屬性 var delegate: HttpProtocol?

        httpCtl.onRequest("www.dianping.com")

        那麼,delegate發生作用的過程為,httpController的對象httpCtl調用onRequest方法,onRequest方法中擷取到網路資料的原始值,需要調用parseResults方法進行資料解析.而parseResults的函數體是在tableViewController中定義的.則最終過程未,在httpCtl.onRequest中使用self.delegate?.parseResults(jsonResult)即可對網路資料進行解析.同時,解析的資料在parseResults函數體中即可直接傳遞給tableViewController(傳遞過程即為,直接賦值給tableViewController的屬性如products數組即可).

        以上,就是delegate發生作用的基本過程.描述不清楚的地方,歡迎各位同學一起來探討.

        其實,不採用delegate的方式也可以實現上述功能,即將parseResults函數體直接定義為HttpController自身的方法,則擷取網路資料和解析網路資料都在HttpController中完成.最後通過segue等方式將資料從HttpController中傳遞給tableViewController即可.但涉及到更加複雜的資料傳遞或者操作,還是推薦使用delegate的思想來實現.

        那麼,關於UITableView的基本用法就寫到這裡了,如有不準確的地方,歡迎指正.


UITableView---IOS開發的常用控制項使用總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.