У меня есть контроллер представления, у которого есть 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]()
На картинке ниже вы можете увидеть vc, когда пользователь открывает этот vc.
На рисунке ниже вы можете увидеть всплывающее окно, где пользователь должен выбрать.
На рисунке ниже вы можете увидеть tableView после того, как пользователь 3 раза выбрал textField.
На рисунке ниже, здесь добавлено 4-е текстовое поле.
На рисунке 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
}