2016-12-28 3 views
1

Dans mon application, j'ai "groupes" d'espèces affichées sur un UITableView.définition d'une hauteur de ligne à 0, pour les lignes sélectionnées (swift)

Certains groupes sont gratuits et certains sont achetés dans l'application.

Les groupes qui sont un achat in-app ont un UIImage d'un cadenas sur cette ligne configurée dans le cellForRowAtIndexPath.

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

     let specieImage: UIImageView = cell.viewWithTag(Resource.SpeciesImageTag) as! UIImageView 
     let specieName: UILabel   = cell.viewWithTag(Resource.SpeciesNameTag) as! UILabel 
     let specieGenus: UILabel  = cell.viewWithTag(Resource.SpeciesGenusTag) as! UILabel 
     let specieFamily: UILabel  = cell.viewWithTag(Resource.SpeciesFamilyTag) as! UILabel 

     specieName.text  = self.species[(indexPath as NSIndexPath).row].specie 
     specieFamily.text = "" 
     specieGenus.text = AppDelegate.getRLDatabase().getSubGroupName_BySpecieName(specieName.text!) 


     let padLock: UIImageView  = cell.viewWithTag(Resource.SpeciesCategoryLabelTag) as! UIImageView 

     padLock.image = UIImage(named: "PadlockIcon") 
     padLock.alpha = 0.7 

     let fishesPurchased = UserDefaults.standard.bool (forKey: "ReefLife5Fishes") 
     let sharksPurchased = UserDefaults.standard.bool (forKey: "ReefLife6Sharks") 
     let turtlesPurchased = UserDefaults.standard.bool (forKey: "ReefLife8Turtles") 
     let seahorsesPurchased = UserDefaults.standard.bool (forKey: "ReefLife9Seahorses") 
     let vertebratesPurchased = UserDefaults.standard.bool (forKey: "ReefLife3Vertebrates") 
     let fullPurchased = UserDefaults.standard.bool (forKey: "ReefLife1Full") 

     padLock.isHidden = false 
     specieImage.alpha = 1.0 

     let speciesGroup = self.species[(indexPath as NSIndexPath).row].group 

     if fullPurchased == true { 

      padLock.isHidden = true 
      specieImage.alpha = 1.0 

     } else if speciesGroupVertebratesArray.contains(speciesGroup) { 

      if vertebratesPurchased == true { 

       padLock.isHidden = true 
       specieImage.alpha = 1.0 

      } else { 

       if speciesGroup == "Fish" { 
        if fishesPurchased == true{ 
         padLock.isHidden = true 
         specieImage.alpha = 1.0 

        } else{ 
         specieImage.alpha = 0.5 
        } 
       } else if (speciesGroup == "Sharks" || speciesGroup == "Rays") { 
        if sharksPurchased == true{ 
         padLock.isHidden = true 
         specieImage.alpha = 1.0 

        } else{ 
         specieImage.alpha = 0.5 
        } 
       } else if speciesGroup == "Syngnathiformes" { 
        if seahorsesPurchased == true{ 
         padLock.isHidden = true 
         specieImage.alpha = 1.0 

        } else{ 
         specieImage.alpha = 0.5 
        } 
       } else if speciesGroup == "Reptilia" { 
        if turtlesPurchased == true{ 
         padLock.isHidden = true 
         specieImage.alpha = 1.0 

        } else{ 
         specieImage.alpha = 0.5 
        } 
       } 
      } 

     } 
.... 

Je dispose d'un réglage d'option pour « masquer les éléments verrouillés » sur la base d'une UISwitch

Lorsque l'utilisateur sélectionne, je veux masquer les groupes verrouillés (ou des éléments non achetés). Je pensais que la meilleure façon d'y parvenir serait de masquer les lignes spécifiques, en définissant la hauteur de ligne à 0.

J'ai du mal à définir la hauteur de ligne à 0 en utilisant le indexPath.row comme le fait l'indexPath.row n'accepte pas une commande CGFloat.

Suggestions?

EDIT: Réaliser J'ai besoin d'utiliser la fonction indexPath: IndexPath de heightForRowAt, mais j'ai du mal à l'assigner à un indexPath.row. Peut-être une meilleure question serait: Comment puis-je le configurer afin que je sache quel indexPath.row a "padLock.isHidden == false".

Répondre

2

La hauteur de ligne est définie dans une fonction de délégué distincte, et non dans la fonction de configuration cellForRowAt. Essayez quelque chose comme ceci:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
{ 
    rowHeight = [your default row height] 

    record = frc.object(at: indexPath) as [YourEntity] 

    if record.[what indicates locked] == true 
    { 
     rowHeight = 0 
    } 

    return CGFloat(rowHeight) 
} 
+0

Merci, j'ai essayé dans le heightForRow, mais votre idée est beaucoup plus proche que ce que j'avais essayé. Le seul problème avec ce qui précède est que je ne peux pas comprendre ce que frc représente? –

+0

C'est exactement ce que j'ai appelé mon fetchedResultsController: private var frc = NSFetchedResultsController () –