2016-03-05 1 views
0

bonjour J'ai vu dans certaines applications qui montre spinner ou indicateur d'activité sur une cellule tableview qui n'a pas rempli avec une valeur lorsque l'utilisateur recherche quelque chose. C'est difficile à expliquer mais c'était comme si je tapais quelque chose dans la barre de recherche, les résultats commençaient à apparaître sur la tableview en fonction des mots-clés que je tape et spinner commence à bouger sur les cellules. si les deux premières valeurs viennent rapidement, cela montre le spinner sur la troisième cellule, tant que les valeurs commencent à remplir les cellules, le spinner va à la cellule suivante qui est vide. Comment puis-je avoir cet effet. voici mon code de recherche Villes et paysComment puis-je montrer le spinner/indicateur sur tableView Chargement des cellules

class CountryTableViewController: UITableViewController, UISearchResultsUpdating { 

    var delegate : CountryTableViewControllerDelegate! = nil 
    var dict = NSDictionary() 
    var filteredKeys = [String]() 

    var resultSearchController = UISearchController() 

    var newTableData = [String]() 

    var departureOrArrivalSegue:Int? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.resultSearchController = ({ 

      let controller = UISearchController(searchResultsController: nil) 
      controller.searchResultsUpdater = self 
      controller.dimsBackgroundDuringPresentation = false 
      controller.searchBar.sizeToFit() 
      self.tableView.tableHeaderView = controller.searchBar 
      self.definesPresentationContext = true 
      return controller 


     })() 

     self.tableView.reloadData() 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     if (self.resultSearchController.active) { 

      return self.filteredKeys.count 
     } else { 

      return dict.count 
     } 

    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CountryTableViewCell 

     if(self.resultSearchController.active){ 

      // let key = self.filteredKeys[indexPath.row] 

      //let dictionary = self.dict[key] as! NSDictionary 






       let cityName = (((self.dict["\(indexPath.row)"] as?NSDictionary)!["Country"] as?NSDictionary)!["city_name"] as?NSString) 

       let stateName = (((self.dict["\(indexPath.row)"] as?NSDictionary)!["Country"] as? NSDictionary)!["state_name"] as? NSString) 

       let shortName = (((self.dict["\(indexPath.row)"] as?NSDictionary)!["Country"] as? NSDictionary)!["short_country_name"] as? NSString) 


      if (cityName !== "-" || shortName !== "-"){ 
       cell.stateNameLabel.text = stateName as? String 
       cell.cityNameLabel.text = cityName as? String 
       cell.shortNameLabel.text = shortName as? String 

      } 

         return cell 

     }else{ 



      if let cityName = (((self.dict["\(indexPath.row)"] as?NSDictionary)!["Country"] as?NSDictionary)!["city_name"] as?NSString){ 
      cell.cityNameLabel.text = cityName as String 
       } 
      return cell 
     } 



    } 

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

     let id = Int((((dict["\(indexPath.item)"] as?NSDictionary)!["Country"] as?NSDictionary)!["id"] as?NSString)! as String) 

     let cityName = (((dict["\(indexPath.item)"] as?NSDictionary)!["Country"] as?NSDictionary)!["city_name"] as?NSString)! as String 

     let countryShortName = (((dict["\(indexPath.item)"] as?NSDictionary)!["Country"] as?NSDictionary)!["short_country_name"] as?NSString)! as String 

     delegate.country(id!,cityName: cityName, countryShortName: countryShortName,departureOrArrivalSegue: departureOrArrivalSegue!) 

     self.navigationController!.popViewControllerAnimated(true) 



    } 



    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated); 
     self.navigationController?.setNavigationBarHidden(false, animated: true) 
    } 

    override func viewWillDisappear(animated: Bool) { 

     super.viewWillDisappear(animated); 
     self.navigationController?.setNavigationBarHidden(true, animated: false) 

     self.view.layoutIfNeeded() 
    } 




    func updateSearchResultsForSearchController(searchController: UISearchController) { 
     let searchWord = searchController.searchBar.text! 
     getCountriesNamesFromServer(searchWord) 
    } 



    func getCountriesNamesFromServer(searchWord:String) { 
     let url:String = "localhost" 
     let params = ["keyword":searchWord] 

     ServerRequest.postToServer(url, params: params) { result, error in 
      if let result = result { 
       print(result) 

       self.dict = result 

       self.filteredKeys.removeAll() 

       for (key, value) in self.dict { 
        let valueContainsCity: Bool = (((value as? NSDictionary)?["Country"] as? NSDictionary)?["city_name"] as? String)?.uppercaseString.containsString(searchWord.uppercaseString) ?? false 

        let valueContainsCountry: Bool = (((value as? NSDictionary)?["Country"] as? NSDictionary)?["country_name"] as? String)?.uppercaseString.containsString(searchWord.uppercaseString) ?? false 

        if valueContainsCity || valueContainsCountry { 
         self.filteredKeys.append(key as! String) 
        } 
       } 
        dispatch_async(dispatch_get_main_queue()) { 
       self.tableView.reloadData() 
       } 
      } 
     } 
} 
} 

C'est celui de l'application qui a un effet comme celui-ci que je dois

enter image description here

Répondre

0

Cela dépend exactement ce que l'effet que vous êtes à la recherche pour est, mais vous pouvez ajouter une vue avec le spinner comme une sous-vue (de sorte que vous pouvez le positionner centralement) comme le pied de page vue de la table.

+0

désolé je ne comprends pas. vous dites que je devrais créer une vue et, en plus de cela, je devrais avoir un fileur et ensuite le positionner sur les cellules? laissez-moi vous envoyer la capture d'écran de l'application – user1hjgjhgjhggjhg

+0

Non, en tant que pied de tableau, pas sur une cellule – Wain

+0

okay s'il vous plaît vérifier la capture d'écran. Je viens de mettre à jour la question – user1hjgjhgjhggjhg

1

Ce que j'ai fait est d'ajouter un subView par programmation, donc la table principale est en arrière-plan, et le spinner est centralisé. Cet exemple est en réalité en Objective-C, mais vous avez l'idée. C'est dans la méthode viewDidLoad:

self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
self.spinner.hidesWhenStopped = YES; 
self.spinner.frame = CGRectMake(0, 0, 80, 80); 
self.spinner.center = CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2); 
[self.view addSubview:self.spinner];