2016-12-28 39 views
1

在我的应用程序中,我在UITableView上显示了物种的“组”。将行高设置为0,对于选定的行(swift)

有些群组是免费的,有些群组是在应用内购买的。

应用内购买的群组在cellForRowAtIndexPath中设置的该行上具有挂锁的UIImage。

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 
        } 
       } 
      } 

     } 
.... 

我有一个选项设置为“隐藏锁定的项目”基于一个UISwitch

当用户选择这个,我想隐藏锁定小组(或不购买的物品)。我想通过将行高设置为0可以隐藏特定的行。

我很努力地将行高设置为0,使用indexPath.row作为它的indexPath.row不接受CGFloat命令。

对此提出建议?编辑: 实现我需要使用heightForRowAt indexPath:IndexPath函数,但我有一个困难的时间分配给indexPath.row。

也许更好的问题是:我如何设置它,以便我知道哪个indexPath.row具有“padLock.isHidden == false”。

回答

2

行高设置在单独的委托函数中,而不是cellForRowAt设置函数。尝试这样的事情:

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

谢谢,我一直在尝试在heightForRow里面,但是你的想法比我一直在尝试的要多得多。上述唯一的问题是我无法弄清楚frc代表什么? –

+0

那就是我所谓的fetchedResultsController:private var frc = NSFetchedResultsController () –