2017-07-19 6 views
0

Je veux tirer pour actualiser pour mon application de flux RSS nouvelles. J'utilise le contrôleur de navigation et le contrôleur de vue de table. Comment dois-je faire sur Table View Controller? Que devrions-nous ajouter? Mon code est ici.Tirer pour actualiser sur tableView

class TableviewController: UITableViewController { 

var items : Array<Item> = [] 
var entries : Array<Entry> = [] 

override func viewDidLoad() { 
    super.viewDidLoad() 


    loadRSS() 
    loadAtom() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 


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

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

    let item:Item = self.items[indexPath.row] 
    cell.textLabel?.text = item.title 
    cell.detailTextLabel?.text = self.pubDateStringFromDate(item.pubDate! as Date) 

    return cell 
} 

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    let item = self.items[indexPath.row] 

    let url:URL = URL(string: item.link!)! 
    let safariViewController = SFSafariViewController(url: url, entersReaderIfAvailable: true) 
    present(safariViewController, animated: true, completion: nil) 
} 

func loadRSS() { 

    let feedUrlString:String = "websiteurl" 

    Alamofire.request(feedUrlString).response { response in 

     if let data = response.data, let _ = String(data: data, encoding: .utf8) { 

      TIFeedParser.parseRSS(xmlData: data as NSData, completionHandler: {(isSuccess, channel, error) -> Void in 

       if (isSuccess) { 
        self.items = channel!.items! 
        self.tableView.reloadData() 
       } 

       if (response.error != nil) { 
        print((response.error?.localizedDescription)! as String) 
       } 
      }) 
     } 
    } 

} 

func loadAtom() { 

    let feedUrlString:String = "websiteurl" 

    Alamofire.request(feedUrlString).response { response in 

     if let data = response.data, let _ = String(data: data, encoding: .utf8) { 

      TIFeedParser.parseAtom(xmlData: data as NSData, completionHandler: {(isSuccess, feed, error) -> Void in 

       if (isSuccess) { 
        self.entries = feed!.entries! 
        self.tableView.reloadData() 
       } 

       if (error != nil) { 
        print((error?.localizedDescription)! as String) 
       } 
      }) 
     } 
    } 
} 

func pubDateStringFromDate(_ pubDate:Date)->String { 
    let format = DateFormatter() 
    format.dateFormat = "yyyy/M/d HH:mm" 

    let pubDateString = format.string(from: pubDate) 
    return pubDateString 
} 
} 

Répondre

0

Déclarez une refreshControl de propriété dans votre TableViewController comme

var refreshControl:UIRefreshControl? 

La dans viewDidLoad() fonction ajoutez le code suivant

refreshControl?.addTarget(self, action: #selector(loadRSS), for: .valueChanged) 
self.tableView.addSubview(refreshControl!) 

Mettez à jour votre fonction loadRSS() comme

func loadRSS() { 

    let feedUrlString:String = "websiteurl" 

    Alamofire.request(feedUrlString).response { response in 
self.refreshControl?.endRefreshing(
     if let data = response.data, let _ = String(data: data, encoding: .utf8) { 

      TIFeedParser.parseRSS(xmlData: data as NSData, completionHandler: {(isSuccess, channel, error) -> Void in 

       if (isSuccess) { 
        self.items = channel!.items! 
        self.tableView.reloadData() 
       } 

       if (response.error != nil) { 
        print((response.error?.localizedDescription)! as String) 
       } 
      }) 
     } 
    } 

} 
0

S'il vous plaît se référer au code suivant, comme je l'ai ajouté tirer pour rafraîchir le contrôle sur votre code.

class TableviewController: UITableViewController { 

    var items : Array<Item> = [] 
    var entries : Array<Entry> = [] 

    var pullToFrefreshNews:UIRefreshControl! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     loadRSS() 
     loadAtom() 

     self.addPulltoRefrehs() 
    } 

    func addPulltoRefrehs() { 
     self.pullToFrefreshNews = UIRefreshControl() 
     self.pullToFrefreshNews.addTarget(self, action: #selector(TableviewController.loadRSS), for: UIControlEvents.valueChanged) 
     self.newsTableVU.addSubview(pullToFrefreshNews) 
    } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 


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

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

     let item:Item = self.items[indexPath.row] 
     cell.textLabel?.text = item.title 
     cell.detailTextLabel?.text = self.pubDateStringFromDate(item.pubDate! as Date) 

     return cell 
    } 

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

     let item = self.items[indexPath.row] 

     let url:URL = URL(string: item.link!)! 
     let safariViewController = SFSafariViewController(url: url, entersReaderIfAvailable: true) 
     present(safariViewController, animated: true, completion: nil) 
    } 

    func loadRSS() { 

     let feedUrlString:String = "websiteurl" 

     Alamofire.request(feedUrlString).response { response in 

      if let data = response.data, let _ = String(data: data, encoding: .utf8) { 

       TIFeedParser.parseRSS(xmlData: data as NSData, completionHandler: {(isSuccess, channel, error) -> Void in 

        if (isSuccess) { 
         self.items = channel!.items! 
         self.tableView.reloadData() 
        } 

        if (response.error != nil) { 
         print((response.error?.localizedDescription)! as String) 
        } 
       }) 
      } 
     } 

    } 

    func loadAtom() { 

     let feedUrlString:String = "websiteurl" 

     Alamofire.request(feedUrlString).response { response in 

      if let data = response.data, let _ = String(data: data, encoding: .utf8) { 

       TIFeedParser.parseAtom(xmlData: data as NSData, completionHandler: {(isSuccess, feed, error) -> Void in 

        if (isSuccess) { 
         self.entries = feed!.entries! 
         self.tableView.reloadData() 
        } 

        if (error != nil) { 
         print((error?.localizedDescription)! as String) 
        } 
       }) 
      } 
     } 
    } 

    func pubDateStringFromDate(_ pubDate:Date)->String { 
     let format = DateFormatter() 
     format.dateFormat = "yyyy/M/d HH:mm" 

     let pubDateString = format.string(from: pubDate) 
     return pubDateString 
    } 
} 
0

1) Déclarer une propriété de type UIRefreshControl comme:

var refreshControl = UIRefreshControl() 

2) Dans viewDidLoad() méthode ajouter cette refreshControl à la vue de table:

self.refreshControl.addTarget(self, action: #selector(loadRSS), for: .valueChanged) 

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