下面是一個簡單的應用,表格檢視的各個單元格自動非同步載入各個網站的favicon圖示,並顯示出來。
(2)在Main.storyboard中新增一個Table View,並將Table View的Prototype Cells(原型單元格)數改成1,Selection(選擇樣式)改稱No Selection
原文出自:www.hangge.com 轉載請保留原文連結:http://www.hangge.com/blog/cache/detail_873.html
主要是複習下如何自定義單元格,單元格中圖片的非同步載入,以及didSet的用法。
效果圖如下:
操作步驟:
(1)先建立單元格類 - FaviconTableViewCell.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
import UIKit class FaviconTableViewCell : UITableViewCell { //此操作佇列執行下載的完成處理器 // var operationQueue:NSOperationQueue? //此單元格顯示的URL var url: NSURL ? { //當URL發生變化 didSet { //顯示此文字 self .textLabel?.text = self .url?.host //建立請求 let request = NSURLRequest ( URL : self .url!) let session = NSURLSession .sharedSession() let dataTask = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) -> Void in //將獲取到的資料轉化成影像 let image = UIImage (data: data!) //對UI的更新必須在主佇列上完成 NSOperationQueue .mainQueue().addOperationWithBlock({ () -> Void in //將已載入的影像賦予影像檢視 self .imageView?.image = image //影像檢視可能已經因為新影像而改變了尺寸 //所以需要重新調整單元格的佈局 self .setNeedsLayout() }) }) as NSURLSessionTask //使用resume方法啟動任務 dataTask.resume() } } override func awakeFromNib() { super .awakeFromNib() } override func setSelected(selected: Bool , animated: Bool ) { super .setSelected(selected, animated: animated) } } |
(2)在Main.storyboard中新增一個Table View,並將Table View的Prototype Cells(原型單元格)數改成1,Selection(選擇樣式)改稱No Selection
(3)選中單元格,將樣式設為Basic,並將Indentifier(識別符號)改為FaviconCell
(4)再把單元格的Identity Inspector(身份檢視器)改為FaviconTableViewCell
(5)最後按住Control鍵,拖動表格檢視到檢視控制器上,分別新增資料來源和委託(dataSource與delegate)
(6)ViewController.swift程式碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import UIKit class ViewController : UIViewController { let hosts = [ "hangge.com" , "163.com" , "baidu.com" , "qq.com" , "taobao.com" ] override func viewDidLoad() { super .viewDidLoad() } //在本例中,只有一個分割槽 func numberOfSectionsInTableView(tableView: UITableView !) -> Int { return 1; } //返回表格行數(也就是返回控制元件數) func tableView(tableView: UITableView , numberOfRowsInSection section: Int ) -> Int { return self .hosts.count } //建立各單元顯示內容(建立引數indexPath指定的單元) func tableView(tableView: UITableView , cellForRowAtIndexPath indexPath: NSIndexPath ) -> UITableViewCell { //為了提供表格顯示效能,已建立完成的單元需重複使用 let identify: String = "FaviconCell" //同一形式的單元格重複使用,在宣告時已註冊 let cell = tableView.dequeueReusableCellWithIdentifier(identify) as ! FaviconTableViewCell let host = hosts[indexPath.row] cell.url = url return cell } override func didReceiveMemoryWarning() { super .didReceiveMemoryWarning() } } |
原文出自:www.hangge.com 轉載請保留原文連結:http://www.hangge.com/blog/cache/detail_873.html