2016-12-28 1 views
1

В моем приложении у меня есть «группы» видов, отображаемых в UITableView.установка высоты строки до 0, для выбранных строк (быстрый)

Некоторые группы бесплатны, а некоторые - в приложении.

Группы, которые являются покупкой в ​​приложении, имеют UIImage висячего замка в этой строке, настроенной в 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 
        } 
       } 
      } 

     } 
.... 

У меня есть настройки опций, чтобы «скрыть заблокированные элементы» на основе UISwitch

Когда пользователь выбирает это, я хочу, чтобы скрыть заблокированные группы (или не купленные предметы). Я решил, что лучший способ добиться этого - скрыть конкретные строки, установив высоту строки на 0.

Я изо всех сил пытаюсь установить высоту строки 0 с помощью indexPath.row, поскольку это indexPath.row делает не принимать команду CGFloat.

Предложения?

EDIT: Поймите, мне нужно использовать функцию 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 () –