tableview中使用异步线程加载图片,并且实现下拉刷新和上拉翻页功能。
效果如下:
首先,创建工程:
stroyboard中增加tableview
如下:
增加RootTableViewController
代码如下:
//
// RootTableViewController.swift
// swiftSimpleNews
//
// Created by Chi Zhang on 14/6/30.
// Copyright (c) 2014年 Chi. All rights reserved.
//
import UIKit
class RootTableViewController: UITableViewController, LoadMoreTableFooterViewDelegate {
var dataSource = NSMutableArray()
var thumbQueue = NSOperationQueue()
var pageNo = 1
let PAGESIZE = 10
var loadMoreFooterView: LoadMoreTableFooterView?
var loadingMore: Bool = false
var loadingMoreShowing: Bool = false
// init(coder aDecoder: NSCoder!) {
// super.init(coder: aDecoder)
// println("init coder")
// }
//
// init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
// super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
// println("init name")
// }
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem
self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
let refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "下拉刷新")
refreshControl.addTarget(self, action: "loadDataSource", forControlEvents: UIControlEvents.ValueChanged)
self.refreshControl = refreshControl
if self.loadMoreFooterView == nil {
println("contentSize \(self.tableView.contentSize.height) framewidth = \(self.tableView.frame.size.width) frameheight= \(self.tableView.frame.size.height)")
self.loadMoreFooterView = LoadMoreTableFooterView(frame: CGRectMake(0, self.tableView.contentSize.height, self.tableView.frame.width, self.tableView.frame.height))
self.loadMoreFooterView!.delegate = self
self.tableView.addSubview(self.loadMoreFooterView!)
}
loadDataSource(true)
}
// LoadMoreTableFooterViewDelegate
func loadMoreTableFooterDidTriggerRefresh(view: LoadMoreTableFooterView) {
// loadMoreTableViewDataSource()
self.pageNo++
loadingMore = true
loadDataSource(false)
println("loadMoreTableFooterDidTriggerRefresh")
}
func loadMoreTableFooterDataSourceIsLoading(view: LoadMoreTableFooterView) -> Bool {
return loadingMore
}
override// UIScrollViewDelegate
func scrollViewDidScroll(scrollView: UIScrollView!)
{
if (loadingMoreShowing) {
loadMoreFooterView!.loadMoreScrollViewDidScroll(scrollView)
}
}
override func scrollViewDidEndDragging(scrollView: UIScrollView!, willDecelerate decelerate: Bool) {
if (loadingMoreShowing) {
loadMoreFooterView!.loadMoreScrollViewDidEndDragging(scrollView)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources t