Переопределение данных строки раздела в развернутом табличном представлении, когда существует несколько разделов одного типа - PullRequest
0 голосов
/ 11 марта 2019

Я создал разборное табличное представление с использованием разделов, которое, в свою очередь, содержит одну строку. Изначально в табличном представлении есть 4 раздела, а в моем последнем разделе есть возможность добавлять 3-й раздел несколько раз, когда пользователь нажимает на последний.

Теперь я сталкиваюсь с проблемой, когда пользователь расширяет раздел и вводит данные, а после этого, когда он расширяет динамически добавляемый раздел, те же данные, которые появляются только во вновь добавленном, и наоборот, если пользователь изменяет какие-либо данные. в новой добавленной строке раздела он переопределяет существующий контент в 3-м разделе.

Код выглядит следующим образом:

override func viewDidLoad() {
        super.viewDidLoad()

  //creating section items where 1st three are static and the third section will add dynamically when the last section tapped by the user.
  tableMenuItems = [["sectionHeader": "Ship To","isCollapsed":true, "image" : "shipto.png" ],
                    ["sectionHeader": "Ship From","isCollapsed":true,"image" : "shipfrom.png"],
                    ["sectionHeader": "Package Details","isCollapsed":true,"image" : "package.png"],
                    ["sectionHeader": "Add a Package","isCollapsed":true,"image" : "newaddpack.png"]]
}

func numberOfSections(in tableView: UITableView) -> Int {
    return tableMenuItems.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    let isCollapsed = tableMenuItems[section]["isCollapsed"] as! Bool
    return isCollapsed ? 0 : 1
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
{    
   let view = UIView.init(frame: CGRect.init(x: 0, y: 0, width: tableView.frame.size.width, height: 120))
   view.tag = 200 + section
   view.backgroundColor = .white
   let prefixIconBtn = UIButton.init(frame: CGRect.init(x: 12, y: 20, width: 48, height: 48))
   prefixIconBtn.setImage(UIImage.init(named: tableMenuItems[section]["image"] as! String), for: .normal)
   prefixIconBtn.tag = 500 + section
   prefixIconBtn.addTarget(self, action: #selector (displayOrHideSection(_sender:)), for: .touchUpInside)

   let titleLabel = UILabel.init(frame: CGRect.init(x: 75, y: 18, width: 250, height: 60))
   titleLabel.tag = 100 + section

   let sectionHeaderBtn = UIButton.init(frame: titleLabel.frame)
   sectionHeaderBtn.addTarget(self, action: #selector (displayOrHideSection(_sender:)), for: .touchUpInside)
   sectionHeaderBtn.tag = section

   titleLabel.font = UIFont(name:"SFUIText-Regular", size: 20.0)

   let plusOrMinus = UIButton.init(frame: CGRect.init(x: 340, y: 20, width: 38, height: 38))
   plusOrMinus.tag = section
   plusOrMinus.addTarget(self, action: #selector (displayOrHideSection(_sender:)), for: .touchUpInside)
   titleLabel.text = tableMenuItems[section]["sectionHeader"] as? String

   if titleLabel.text == "Add a Package" {
      plusOrMinus.isHidden = true   
   }

   if tableMenuItems[section]["isCollapsed"] as! Bool == true
   {
      plusOrMinus.setBackgroundImage(UIImage.init(named: "Log_plus"), for: .normal)
     tableMenuItems[section]["isCollapsed"] = true
   }
  else
  {
     plusOrMinus.setBackgroundImage(UIImage.init(named: "Log_minus"), for: .normal)
     tableMenuItems[section]["isCollapsed"] = false
  }

  view.addSubview(titleLabel)
  view.addSubview(prefixIconBtn)
  view.addSubview(sectionHeaderBtn)
  view.addSubview(plusOrMinus)

  plusOrMinus.tag = section

  let seperatorLine = UILabel.init(frame: CGRect.init(x: 78, y: 78, width: tableView.frame.size.width, height: 1))
  seperatorLine.backgroundColor = UIColor.lightGray
  view.addSubview(seperatorLine)    
  return view
}

@objc func displayOrHideSection( _sender : AnyObject)
{       
    let section = _sender.tag        
    if section == 0
    {
        if tableMenuItems[0]["isCollapsed"] as! Bool == false
        {
            tableMenuItems[0]["isCollapsed"] = true
        }
        else
        {
            tableMenuItems[0]["isCollapsed"] = false
        }
    }

    else if section == 1
    {
        if tableMenuItems[1]["isCollapsed"] as! Bool == false
        {
            tableMenuItems[1]["isCollapsed"] = true
        }
        else
        {
            tableMenuItems[1]["isCollapsed"] = false
        }
    }
    else if section == 2
    {
        if tableMenuItems[2]["isCollapsed"] as! Bool == false
        {
            tableMenuItems[2]["isCollapsed"] = true
        }
        else
        {
            tableMenuItems[2]["isCollapsed"] = false
        }
    }        
    else if section! >= 3
    {                       
        if section!  > 502

        {
            // to delete a dynamically added  package
            tableMenuItems.remove(at: section! - 500)               
        }
        else if section!  < 502              
        {               
            // adding a new package section when the user taps on Add a package section(Last section)

        let titleLabel  = self.logTable?.viewWithTag(100 + section!) as! UILabel

        print(titleLabel)

        // when add a package tapped

        if titleLabel.text == "Add a Package"
        {
            tableMenuItems.insert(["sectionHeader": "Package Details","isCollapsed":true,"image" : "package.png"], at: tableMenuItems.count-1)
        }

      // when plus or minus button tapped on Add a package
      else
      {

        if tableMenuItems[section!]["isCollapsed"] as! Bool == false
        {
             // expanding section

             tableMenuItems[section!]["isCollapsed"] = true
             tableMenuItems[section!]["image"] = "package.png"


        }
        else
        {
             // collapsing section

            tableMenuItems[section!]["isCollapsed"] = false
            tableMenuItems[section!]["image"] = "newdeletepackage.png"             
        }

        }

      }
    }
 logTable!.reloadData()

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...