6.IOS(swift)-scrollView(tableView) ·下拉刷新上拉加载

上一次我们实现了缓存图片加载,这一次我们在上次的基础上加上下拉刷新,上拉加载。


6.IOS(swift)-scrollView(tableView) ·下拉刷新上拉加载_第1张图片
Paste_Image.png

申明var data:NSArray = NSArray(),作为获取数据的储存,网络数据获取到后都放入data.下面创建下拉刷新和上拉加载。

 var refreshing: Bool = false {
        didSet {
            if (self.refreshing) {
                self.refreshControl?.beginRefreshing()
                self.refreshControl?.attributedTitle = NSAttributedString(string: "Loading...")
                println("Loading...")
            }
            else {
                
                self.refreshControl?.endRefreshing()
                self.refreshControl?.attributedTitle = NSAttributedString(string: "Pull to Refresh")
                println("Loaded & set:Pull to Refresh")
            }
        }
    }

override func viewDidLoad() {
        super.viewDidLoad()
        //添加下拉刷新
        self.refreshControl = UIRefreshControl()
        self.refreshControl?.addTarget(self, action: "onPullToFresh", forControlEvents: UIControlEvents.ValueChanged)
        self.tableView.addSubview(refreshControl!)
        //上拉刷新
        self.setupInfiniteScrollingView()
    
    }
//下拉获取数据
func onPullToFresh() {
        
        fetchDataFromServer()        
}

//上拉刷新
 private func setupInfiniteScrollingView() {
        self.infiniteScrollingView = UIView(frame: CGRectMake(0, self.tableView.contentSize.height, self.tableView.bounds.size.width, 60))
        self.infiniteScrollingView!.autoresizingMask = UIViewAutoresizing.FlexibleWidth
        self.infiniteScrollingView!.backgroundColor = UIColor.whiteColor()
        var activityViewIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.White)
        activityViewIndicator.color = UIColor.darkGrayColor()
        activityViewIndicator.frame = CGRectMake(self.infiniteScrollingView!.frame.size.width/2-activityViewIndicator.frame.width/2, self.infiniteScrollingView!.frame.size.height/2-activityViewIndicator.frame.height/2, activityViewIndicator.frame.width, activityViewIndicator.frame.height)
        activityViewIndicator.startAnimating()
        self.infiniteScrollingView!.addSubview(activityViewIndicator)
    }

实现上拉加载的原理:
1.cellForRowAtIndexPath 中判断下拉位置,执行加载操作
2.第一次申请的数据(数组)放入data
3.第二次以后申请的数据使用arrayByAddingObjectsFromArray往data填充,更新tableView

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell
        //当下拉到底部,执行loadMore()
        if (loadMoreEnabled && indexPath.row == self.data.count-1) {
            self.tableView.tableFooterView = self.infiniteScrollingView
            loadMore()
        }
        return cell
}

func loadMore(){
        println("loadMore")
        self.data = self.data.arrayByAddingObjectsFromArray(self.newData as! [String])
        self.tableView.reloadData()
}

你可能感兴趣的:(6.IOS(swift)-scrollView(tableView) ·下拉刷新上拉加载)