Sub View of Header Section ITUable Swift

0

First of all I would like a result like the following, and without using several tables

So far I have the following behavior

Table code:

     @IBOutlet weak var menuTableView: UITableView!

    let sectionTitles =  [NSLocalizedString("movementsAccount",comment:""), NSLocalizedString("movementsCredit",comment:""),NSLocalizedString("movementsCart",comment:""),NSLocalizedString("movementsInversions",comment:"")]


        fileprivate var accountHidden = false { didSet {self.menuTableView.reloadSections(IndexSet.init(integer: 0), with: .automatic)}}
        fileprivate var creditHidden = true { didSet {self.menuTableView.reloadSections(IndexSet.init(integer: 1), with: .automatic)}}
        fileprivate var cardHidden = true { didSet {self.menuTableView.reloadSections(IndexSet.init(integer: 2), with: .automatic)}}
        fileprivate var inversionsHidden = true { didSet {self.menuTableView.reloadSections(IndexSet.init(integer: 3), with: .automatic)}}


        var resultAccount      = [QueryTransactionModel]()
        var resultCollections   = [QueryTransactionModel]()
        var resultCard   = [QueryTransactionModel]()
        var resultInversions   = [QueryTransactionModel]()

 func getCell(cell: PanelHomeTableViewCell, resultTransactions: [QueryTransactionModel], row: Int) ->PanelHomeTableViewCell
    {
        if (resultTransactions.isEmpty)
        {
            cell.setupDefaultCell()
            return cell
        }
        cell.setCellValues(phone: resultTransactions[row].dst, amount: resultTransactions[row].amount, date: resultTransactions[row].date, reason: resultTransactions[row].reference)
        return cell
    }

    func getNumberOfRows(results: [QueryTransactionModel]) ->Int
    {
        if (results.count == 0)
        {
            return 0
        }
        else
        {
            return results.count
        }
    }

    func heigthHeader(results: [QueryTransactionModel])-> CGFloat{
        if (results.count == 0){
            return 0
        }else{
            return 40
        }
    }

    @objc func tapOnHeader(_ sender: UITapGestureRecognizer) {
        if sender.view?.tag == 0 {
            accountHidden = !accountHidden
        }
        else if sender.view?.tag == 1 {
            creditHidden = !creditHidden
        }
        else if sender.view?.tag == 2 {
            cardHidden = !cardHidden
        }
        else if sender.view?.tag == 3 {
            inversionsHidden = !inversionsHidden
        }
    }

}

extension PanelHomeViewController : UITableViewDelegate,UITableViewDataSource
{
    // MARK: - Table view data source
    func numberOfSections(in tableView: UITableView) -> Int {
            return 4
    }

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

            switch (section) {
            case 0:
                if accountHidden { return 0 }
                return getNumberOfRows(results: self.resultAccount)
            case 1:
                if creditHidden { return 0 }

                return getNumberOfRows(results: self.resultCollections)
            case 2:
                if cardHidden { return 0 }
                return getNumberOfRows(results: self.resultCollections)
            case 3:
                if inversionsHidden { return 0 }
                return getNumberOfRows(results: self.resultCollections)
            default:
                return 1
            }

    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 40
    }

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

            switch (section)
            {
            case 0:
                return self.heigthHeader(results: self.resultAccount)
            case 1:
                return self.heigthHeader(results: self.resultCollections)
            case 2:
               return self.heigthHeader(results: self.resultCollections)
            case 3:
                 return self.heigthHeader(results: self.resultCollections)
            default:
                return 0
            }

    }

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let view = UIView()
        view.backgroundColor = UIColor.white
        view.addBottomBorder(Utils.Color.COLOR_SEPARACIONES, height: 1.5, separation: 0)
        let tap = UITapGestureRecognizer.init(target: self, action: #selector(tapOnHeader(_:)))
        tap.numberOfTapsRequired = 1
        view.tag = section
        view.addGestureRecognizer(tap)


        let imageView = UIImageView(frame: CGRect(x: 0, y: 10, width: 20 , height: 20))
        imageView.image = nil
        switch (section)
        {
        case 0 :
            if accountHidden
            {
                imageView.image = UIImage.init(named:"sideMenu_image")

            }
            else{
                imageView.image = UIImage.init(named:"lessTable")
            }

            break
        case 1:
            if creditHidden
            {
                imageView.image = UIImage.init(named:"sideMenu_image")

            }
            else{
                imageView.image = UIImage.init(named:"lessTable")
            }
            break
        case 2:
            if cardHidden
            {
                imageView.image = UIImage.init(named:"sideMenu_image")

            }
            else{
                imageView.image = UIImage.init(named:"lessTable")
            }
            break
        case 3:
            if inversionsHidden
            {
                imageView.image = UIImage.init(named:"sideMenu_image")

            }
            else{
                imageView.image = UIImage.init(named:"lessTable")
            }
            break
        default:
            break

        }
        view.addSubview(imageView)

        let label : UILabel = UILabel()
        label.text = sectionTitles[section]
        label.frame = CGRect(x: 30, y: 5, width: 200, height: 30)
        label.textColor = Utils.Color.COLOR_2B5034
        view.addSubview(label)

        return view
    }

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

            let cell = Bundle.main.loadNibNamed("PanelHomeTableViewCell", owner: self, options: nil)?.first as! PanelHomeTableViewCell
            switch (indexPath.section)
            {
            case 0:
                return getCell(cell: cell, resultTransactions: self.resultAccount, row: indexPath.row)
            case 1:
                return getCell(cell: cell, resultTransactions: self.resultCollections, row: indexPath.row)
            case 2:
                return getCell(cell: cell, resultTransactions: self.resultCard, row: indexPath.row)
            case 3:
                return getCell(cell: cell, resultTransactions: self.resultInversions, row: indexPath.row)
            default:
                break
            }
            return cell

    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        // TODO pasar datos verdaderos de la clse de mapeo de las listas
        let row = indexPath.row

        switch (indexPath.section)
        {
        case 0 :
            if(resultAccount.isEmpty){
                return presenter.goToProducts()
            }else{
                return presenter.detailsProduct(type:"COR" ,account :"434543332" ,name:"Bruno Sosa",availableBalance:"102.23",totalBalance:"232.23")
            }


        case 1 :
            if(resultCollections.isEmpty){
                return presenter.goToProducts()
            }else{
                return presenter.detailsProduct(type:"COR" ,account :"434543332" ,name:"Bruno Sosa",availableBalance:"102.23",totalBalance:"232.23")
            }

        case 2 :
            if(resultCard.isEmpty){
                return presenter.goToProducts()
            }else{
                return presenter.detailsProduct(type:"COR" ,account :"434543332" ,name:"Bruno Sosa",availableBalance:"102.23",totalBalance:"232.23")
            }

        case 3 :
            if(resultInversions.isEmpty){
                return presenter.goToProducts()
            }else{
                return presenter.detailsProduct(type:"COR" ,account :"434543332" ,name:"Bruno Sosa",availableBalance:"102.23",totalBalance:"232.23")
            }
        default:
            break

        }

    }
}

It also goes to say that some section may have a subsection like the one in the first example image: TYPE CTA BALANCE but it could be dynamic and could be different between sections, thanks in advance

    
asked by Bruno Sosa Fast Tag 16.05.2018 в 16:24
source

0 answers