6.IOS(swift)-scrollView(tableVie

作者: 俊瑶先森 | 来源:发表于2015-06-05 14:16 被阅读8744次

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


    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()
    }
    
    

    相关文章

      网友评论

      • 巴图鲁:不错
      • 治部少辅:上拉下载部分你的有问题。你在tableView的cellForRow...方法里面调用loadMore,而loadMore调用tableView.reloadData,reloadData又会导致tableView的cellForRow..方法再次被调用,如此一致循环下去,导致大量无用的IO或者网络访问。
        比较合适的方法是在scrollView的didEndDeacceleration里面检查是否滚动到了底部再loadMore
      • eggswift:👍干货~
        不过好多情况下设计就是不想用系统样式,我写了一个自定义的 http://www.jianshu.com/p/c5bc2d8c68e4 如果需要自定义的话可以试试。

      本文标题:6.IOS(swift)-scrollView(tableVie

      本文链接:https://www.haomeiwen.com/subject/gzbdqttx.html