2017-07-22 1 views
0

Je suis nouveau à la programmation SwiftContrôleur de barre de recherche avec vue Table dans swift

Contrôleur SearchBar avec tableview. Je veux afficher les étudiants multiples dans la vue de table son fonctionnement bien. Je peux ajouter le contrôleur de barre de recherche à la vue de tableau et afficher les données des étudiants particuliers. la cellule du tableau de vue contient les informations des étudiants et de l'image que je veux afficher étudiant en particulier après la recherche

c'est le code

@IBOutlet var SearchBarDisp: UISearchBar!

override func viewDidLoad() 
{ 
     super.viewDidLoad() 
     searchController.searchResultsUpdater = self 
     searchController.hidesNavigationBarDuringPresentation = false 
     searchController.dimsBackgroundDuringPresentation = false 
     tableView.tableHeaderView = searchController.searchBar 
    } 

func updateSearchResults(for searchController: UISearchController) { 
//todo 
} 

Je peux obtenir des données d'étudiants de JSON

func getKids(url : String) { 

     UIApplication.shared.beginIgnoringInteractionEvents() 

     var errorCode = "1" 

     var msg = "Failed" 

     var request = URLRequest(url: URL(string: "getstaffstudents", 
              relativeTo: URL(string: serverURL+"/rkapi/api/"))!) 

     let session = URLSession.shared 

     request.httpMethod = "POST" 

     let bodyData = "staffId=\(staffId)" 

     request.httpBody = bodyData.data(using: String.Encoding.utf8); 

     let task = session.dataTask(with:request,completionHandler:{(d,response,error)in 

      do{ 

       if let data = d { 

        if let jsonData = try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary { 

         errorCode = String(describing: jsonData["errorCode"]!) 

         msg = jsonData["msg"] as! String 

         print("msg values",msg) 

         if errorCode == "0" { 

          if let kid_list = jsonData["students"] as? NSArray { 

           for i in 0 ..< kid_list.count { 

            if let kid = kid_list[i] as? NSDictionary { 

             kidHoleData.removeAll() 

             let imageURL = url+"/images/" + String(describing: kid["photo"]!) 

             self.kidsData.append(Kids(
              studentId: kid["studentId"] as? String, 
              name:kid["name"] as? String, 
              classId : kid["classId"] as? String, 
              standard: ((kid["standard"] as? String)! + " " + (kid["section"] as? String)!), 
              photo : (imageURL), 
              school: kid["schoolName"] as? String, 
              schoolId : "1", 
              url : url) 
             ) 
            } 


           } 
           self.loopCount += 1 

           self.do_table_refresh() 
          } 

         } else { 
          self.displayAlert("Kids", message: msg) 
         } 

        } else { 

         self.displayAlert("Kids", message: "Data Not Available. Please try again") 

        } 
       }else { 

        self.displayAlert("Kids", message: "Please try again") 

       } 

      } catch let err as NSError { 

       print("JSON Error \(err)") 
      } 
     }) 

     task.resume() 
    } 

Tableau vue

func numberOfSections(in tableView: UITableView) -> Int { 

     return (kidsData.count == 0) ? 0 : 1 
    } 

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

     return kidsData.count 


    } 


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = 
      tableView.dequeueReusableCell(
       withIdentifier: "Kidscell", for: indexPath) as! KidsTableViewCell 

     let maskLayer = CAShapeLayer() 
     let bounds = cell.bounds 

     maskLayer.path = UIBezierPath(roundedRect: CGRect(x: 3, y: 3, width: bounds.width-15, height: bounds.height-15), cornerRadius: 2).cgPath 
     cell.layer.mask = maskLayer 

     let row = (indexPath as NSIndexPath).row 
     if(kidsData.count>0){ 

      let kid = kidsData\[row\] as Kids 
      cell.kidNameLabel.text = kid.name 
      cell.classLabel.text = kid.standard 
      cell.kidNameLabel.lineBreakMode = .byWordWrapping 
      cell.kidNameLabel.numberOfLines = 0 
      cell.kidImageView.image = UIImage(named: "profile_pic") 
      cell.kidImageView.downloadImageFrom(link: kid.photo!, contentMode: UIViewContentMode.scaleAspectFit) //set your image from link array. 

     } 
     return cell 

    } 

Je veux afficher étudiant particulier en vue de la table (comme si je peux rechercher le nom de l'étudiant comme Vani il Affichons l'élève vani en vue de table) pls m'aider

Répondre

0

copier les données de trou dans la fréquentationInfoDupilicate

var attendanceInfoDupilicate = [AttendanceInfo]() 

A l'intérieur de l'appel de service JSON à la fin

self.attendanceInfoDupilicate = self.attendanceInfo 

updater le contrôleur de recherche

func updateSearchResults(for searchController: UISearchController) 
    { 



     let searchToSeatch = AttendanceSearchBarController.searchBar.text 

     if(searchToSeatch == "") 
     { 
      self.attendanceInfo = self.attendanceInfoDupilicate 

     } 
     else{ 

      self.attendanceInfo.removeAll() 

      let AttedanceData = self.attendanceInfoDupilicate 

      var kidsArray = [String]() 

      for AttendanceInfo in AttedanceData 
      { 

       kidsArray.append(AttendanceInfo.name) 
       if(AttendanceInfo.name.range(of: searchToSeatch!, options: .caseInsensitive) != nil) 
       { 
        self.attendanceInfo.append(AttendanceInfo) 

       } 

      } 




     } 

     self.TableView.reloadData() 


    }