Данные не сидят прямо в таблице в Swift - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть контроллер представления, у которого есть tableView и кнопка. Когда пользователь нажимает кнопку, я показываю ему всплывающее окно для выбора между кнопкой и текстовым полем. Когда один из них выбран, я добавляю его в свой tableView в заголовке и добавляю несколько строк в этот раздел в зависимости от его типа. Если это textField, я добавляю 3, если это кнопка, я добавляю 2.

У меня есть структура, которая определяет мою модель:

struct CreationModel {
    var typeName:String?
    var content:Content
}
struct Content {
    var Hint:String?
    var Query:String?
    var Text:String?
    var Label:String?
    var Kind:String?
}

И я определил эту структуру в моем VC как:

    var itemsInTable = [CreationModel]() 
  1. На картинке ниже вы можете увидеть vc, когда пользователь открывает этот vc. This is the vc when user open this vc

  2. На рисунке ниже вы можете увидеть всплывающее окно, где пользователь должен выбрать. This is the popUp that user should chose

  3. На рисунке ниже вы можете увидеть tableView после того, как пользователь 3 раза выбрал textField.
    this the tableView after user selected textField for 3 time

  4. На рисунке ниже, здесь добавлено 4-е текстовое поле. the 4th textField is added here

На рисунке 4 видно, что данные из первого раздела размещены в разделе 4! Кто-нибудь знает, что здесь происходит и что я делаю не так?

Я также добавляю код моего tableView и код кнопки ниже:

        @IBAction func addRow(_ sender: Any) {
            let popUp:UIAlertController = UIAlertController(title: "انتخاب کنید", message: "چه پارامتری باید اضافه بشه؟", preferredStyle: .alert)

            let TextFieldAction = UIAlertAction(title: "textField", style: UIAlertAction.Style.default)
            {
                UIAlertAction in
    //            self.itemsInTable.append("textField")
                self.itemsInTable.append(CreationModel(typeName: "textField", content: Content(Hint: nil, Query: nil, Text: nil, Label: nil, Kind: nil)))

                self.numberOfSections = self.numberOfSections + 1
                self.tableView.reloadData()
            }

            let ButtonAction = UIAlertAction(title: "Button", style: UIAlertAction.Style.default)
            {
                UIAlertAction in
    //            self.itemsInTable.append("Button")
                self.itemsInTable.append(CreationModel(typeName: "Button", content: Content(Hint: nil, Query: nil, Text: nil, Label: nil, Kind: nil))) 

                self.numberOfSections = self.numberOfSections + 1
                self.tableView.reloadData()


            }

            let CancelAction = UIAlertAction(title: "Print", style: UIAlertAction.Style.cancel)
            {
                UIAlertAction in
    //            self.itemsInTable.append("Button")
    //            self.numberOfRows = self.numberOfRows + 1
    //            self.tableView.reloadData()
                print("⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️\n\n⚠️⚠️\n⚠️\n\n\n\(self.itemsInTable)")
            }
            popUp.addAction(TextFieldAction)
            popUp.addAction(ButtonAction)
            popUp.addAction(CancelAction)
            self.present(popUp, animated: true, completion: nil)


        }

        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            return 70
        }
        func numberOfSections(in tableView: UITableView) -> Int {
            return numberOfSections
        }
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            if itemsInTable[section].typeName == "textField"
            {
                return 3
            }


             else if itemsInTable[section].typeName == "Button"
            {
                return 2
            }
            return 0
        }

        func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
            let cell = tableView.dequeueReusableCell(withIdentifier: "SectionCell") as! CreationTableViewCell
            cell.selectionStyle = .none
    //        print(itemsInTable[indexPath.row])
            if itemsInTable[section].typeName == "textField"
            {
                cell.Btn.isHidden = true
                cell.Txt.isHidden = false
                cell.Txt.text = "textField : \(section)"
                return cell
            }
            else if itemsInTable[section].typeName == "Button"
            {
                cell.Btn.isHidden = false
                cell.Txt.isHidden = true
                cell.Btn.setTitle("Button \(section)", for: .normal)
                cell.Btn.isEnabled = false
                cell.Btn.titleLabel?.textColor = UIColor.white
                cell.Btn.backgroundColor = UIColor.black
                return cell
            }
            //        cell.mainView.backgroundColor = UIColor.black
            return cell
        }



     func tableView(_ tableView: UI

TableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "RowCell") as! RowTableViewCell
        cell.selectionStyle = .none

        print(itemsInTable[indexPath.section])
        if itemsInTable[indexPath.section].typeName == "textField"
        {
            switch (indexPath.section,indexPath.row) {

            case (indexPath.section,0):
//                if itemsInTable[indexPath.section].content.Hint?.isEmpty == false
//                {
//                    cell.txt.text = itemsInTable[indexPath.section].content.Hint
//                }
                cell.TitleLbl.text = "Placeholder"
                cell.EntityLbl.text = "Hint"
                cell.txt.placeholder = "Placeholder"
                itemsInTable[indexPath.section].content.Hint = cell.txt.text
                return cell
            case (indexPath.section,1):
//                if itemsInTable[indexPath.section].content.Query?.isEmpty == false
//                {
//                    cell.txt.text = itemsInTable[indexPath.section].content.Query

    //                }
                    cell.TitleLbl.text = "پارامتر URL"
                    cell.EntityLbl.text = "Query"
                    cell.txt.placeholder = "پارامتر URL"
                    itemsInTable[indexPath.section].content.Query = cell.txt.text
                    return cell
                case (indexPath.section,2):
    //                if itemsInTable[indexPath.section].content.Text?.isEmpty == false
    //                {
    //                    cell.txt.text = itemsInTable[indexPath.section].content.Text
    //                }
                    cell.TitleLbl.text = "متن"
                    cell.EntityLbl.text = "Text"
                    cell.txt.placeholder = "متن"
                    itemsInTable[indexPath.section].content.Text = cell.txt.text
                    return cell

                default:
                    return cell
                }
            }
            else if  itemsInTable[indexPath.section].typeName == "Button"
            {
                switch (indexPath.section,indexPath.row) {

                case (indexPath.section,0):
    //                if itemsInTable[indexPath.section].content.Label?.isEmpty == false
    //                {

    //                    cell.txt.text = itemsInTable[indexPath.section].content.Label
    //                }
                    cell.TitleLbl.text = "متن"
                    cell.EntityLbl.text = "Label"
                    cell.txt.placeholder = "متن روی دکمه"
                    itemsInTable[indexPath.section].content.Label = cell.txt.text
                    return cell
                case (indexPath.section,1):
    //                if itemsInTable[indexPath.section].content.Kind?.isEmpty == false
    //                {
    //                    cell.txt.text = itemsInTable[indexPath.section].content.Kind
    //                }
                    cell.TitleLbl.text = "نوع عملیات"
                    cell.EntityLbl.text = "Kind"
                    cell.txt.placeholder = "اکسل، پای چارت"
                    itemsInTable[indexPath.section].content.Kind = cell.txt.text
                    return cell
                default:
                    return cell
                }
            }
            return cell

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