简体   繁体   English

拉动刷新以使其不适用于Alamofire和Swift 3

[英]Pull to refresh not working with Alamofire and Swift 3

My App uses Alamofire and Swift 3, I have implemented the pull to refresh into my app, but I am sure its not working because I have added the NSDate to my app and it always shows just the time it was loaded not refreshed, also the data just gets added to the bottom of the rows, so when I refresh it doubles my data, does not refresh. 我的应用程序使用Alamofire和Swift 3,我已经实现了将刷新刷新到我的应用程序中的功能,但是我确定它无法正常工作,因为我已将NSDate添加到我的应用程序中,并且始终显示加载的时间未刷新,并且数据只是被添加到行的底部,所以当我刷新它会使我的数据加倍,但不会刷新。 My code is below: 我的代码如下:

import UIKit
import Alamofire
import SVProgressHUD

struct postinput {
    let mainImage : UIImage!
    let name : String!
    let author : String!
    let summary : String!
    let content : String!


}


class TableViewController: UITableViewController {

    //var activityIndicatorView: UIActivityIndicatorView!

    var postsinput = [postinput]()

    var refresh = UIRefreshControl()

    var mainURL = "https://www.example.com/api"

    typealias JSONstandard = [String : AnyObject]

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


        self.tableView.addSubview(refresh)

        //;refresh.attributedTitle = NSAttributedString(string: "Refreshing...", attributes:[NSForegroundColorAttributeName : UIColor.black])
        refresh.backgroundColor = UIColor(red:0.93, green:0.93, blue:0.93, alpha:1.0)
        //refresh.tintColor = UIColor.white

        refresh.addTarget(self, action: #selector(self.refreshData), for: UIControlEvents.valueChanged)
        //refresh.addTarget(self, action: #selector(getter: TableViewController.refresh), for: UIControlEvents.valueChanged)
        refresh.attributedTitle = NSAttributedString(string: "Updated: \(NSDate())")

        //activityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray)
        //tableView.backgroundView = activityIndicatorView

        callAlamo(url: mainURL)


    }

    func refreshData() {

        Alamofire.request("https://www.example.com/api").responseJSON(completionHandler: {
            response in
            self.parseData(JSONData: response.data!)
            self.tableView.separatorStyle = UITableViewCellSeparatorStyle.singleLine

            DispatchQueue.main.async {
                self.tableView.reloadData()
                self.refresh.endRefreshing()
            }


        })



    }



    func callAlamo(url : String){
        //activityIndicatorView.startAnimating()
        SVProgressHUD.show(withStatus: "Loading...")
        SVProgressHUD.setDefaultStyle(SVProgressHUDStyle.dark)
        SVProgressHUD.setDefaultAnimationType(SVProgressHUDAnimationType.native)
        SVProgressHUD.setDefaultMaskType(SVProgressHUDMaskType.black)
        Alamofire.request(url).responseJSON(completionHandler: {
            response in
            self.parseData(JSONData: response.data!)
            self.tableView.separatorStyle = UITableViewCellSeparatorStyle.singleLine
            //self.activityIndicatorView.stopAnimating()
            SVProgressHUD.dismiss()


        })


    }


    func parseData(JSONData : Data) {
        do {
            var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONstandard
            // print(readableJSON)

            if let posts = readableJSON["posts"] as? [JSONstandard] {
                for post in posts {
                    let title = post["title"] as! String

                    let author = post["author"] as! String

                    guard let dic = post["summary"] as? [String: Any], let summary = dic["value"] as? String else {
                        return
                    }
                    let str = summary.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)
                    print(str)

                    guard let dic1 = post["content"] as? [String: Any], let content = dic1["value"] as? String else {
                        return
                    }
                    let str1 = content.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)
                    print(str1)





                    //print(author)

                    if let imageUrl = post["image"] as? String {
                        let mainImageURL = URL(string: imageUrl )
                        let mainImageData = NSData(contentsOf: mainImageURL!)
                        let mainImage = UIImage(data: mainImageData as! Data)

                        postsinput.append(postinput.init(mainImage: mainImage, name: title, author: author, summary: summary, content: content))
                    }
                }
                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }
            }


        }


        catch {
            print(error)
        }


    }


    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return postsinput.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")

        // cell?.textLabel?.text = titles[indexPath.row]

        let mainImageView = cell?.viewWithTag(2) as! UIImageView

        mainImageView.image = postsinput[indexPath.row].mainImage

        mainImageView.layer.cornerRadius = 5.0
        mainImageView.clipsToBounds = true

        //(cell?.viewWithTag(2) as! UIImageView).image = postsinput[indexPath.row].mainImage

        let mainLabel = cell?.viewWithTag(1) as! UILabel

        mainLabel.text = postsinput[indexPath.row].name

        mainLabel.font = UIFont.boldSystemFont(ofSize: 18)

        mainLabel.sizeToFit()

        mainLabel.numberOfLines = 0;

        let autLabel = cell?.viewWithTag(3) as! UILabel

        autLabel.text = postsinput[indexPath.row].author

        autLabel.font = UIFont(name: "Helvetica", size:16)

        autLabel.textColor = UIColor(red: 0.8784, green: 0, blue: 0.1373, alpha: 1.0) /* #e00023 */

        let sumLabel = cell?.viewWithTag(4) as! UILabel

        sumLabel.text = (postsinput[indexPath.row].summary).replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)

        sumLabel.font = UIFont(name: "Helvetica", size:16)

        sumLabel.textColor = UIColor(red:0.27, green:0.27, blue:0.27, alpha:1.0)

        //let contentLabel = cell?.viewWithTag(0) as! UILabel

        //contentLabel.text = (postsinput[indexPath.row].content).replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)



        //(cell?.viewWithTag(3) as! UILabel).text = postsinput[indexPath.row].author

        return cell!
    }


    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            postsinput.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath], with: .fade)
        } else if editingStyle == .insert {
            // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

There is a change in UIRefreshControl for iOS 10. You have been adding refresh control like this: tableView.addSubview(refreshControl). iOS 10的UIRefreshControl有所更改。您一直在添加刷新控件,例如:tableView.addSubview(refreshControl)。 Now, ScrollView, CollectionView and TableView have refreshControl property. 现在,ScrollView,CollectionView和TableView具有refreshControl属性。

so replace this line : 因此,请替换此行:

self.tableView.addSubview(refresh)

to : 至 :

self.tableView.refreshControl = refreshControl

better you check iOS version: 更好地检查iOS版本:

if #available(iOS 10.0, *) {
    self.tableView.refreshControl = refreshControl
} else {
    self.tableView.addSubview(refresh)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM