2017-08-15 64 views
0

我确信以前有人问过这个问题,但我找不到解决方案。 我有一个UITableViewController与静态cells,我有4 sections(到目前为止),并且每个section只有1 cellUITableViewController使用值填充不同部分的单元格

这是第一部分

enter image description here

的第一单元的一部分,这是在相应TableViewCell文件,

AllgemeineProduktdatenCell.swift

class AllgemeineProduktdatenCell: UITableViewCell{ 

    // MARK: - Outlets 
    @IBOutlet weak var AngebotsnameTextF: UITextField! 
    @IBOutlet weak var Referenznummer: UITextField! 
    @IBOutlet weak var modelTextF: UITextField! 
    @IBOutlet weak var bemerkungTextF: UITextView! 
    @IBOutlet weak var extrasTextF: UITextView! 
    @IBOutlet weak var ursprLadenPreisEuroTextF: UITextField! 
    @IBOutlet weak var ursprLadenPreisCentTextF: UITextField! 
    @IBOutlet weak var AngebotsPreisEuroTextF: UITextField! 
    @IBOutlet weak var AngebotsPreisCentTextF: UITextField! 

    // Bereich Möbel 
    @IBOutlet weak var bereichMoebelLabel: UILabel! 
    @IBOutlet weak var bereichMoebelPicker: UIPickerView! 
    @IBAction func showHideBereichMoebelPicker(_ sender: Any) { 
     if bereichMoebelPicker.isHidden{ 
      bereichMoebelPicker.isHidden = false 
     } else{ 
      bereichMoebelPicker.isHidden = true 
     } 
    } 

    // Hersteller 
    @IBOutlet weak var chosenHerstellerLabel: UILabel! 
    @IBOutlet weak var herstellerPickerView: UIPickerView! 
    @IBAction func showHideHerstellerPicker(_ sender: UIButton) { 
     if herstellerPickerView.isHidden{ 
      herstellerPickerView.isHidden = false 
     } else{ 
      herstellerPickerView.isHidden = true 
     } 
    } 

    // Anzeigen auch auf eigener Webseite 
    @IBOutlet weak var anzeigenAuchAufEigenerWebseiteSwitch: UISwitch! 
    @IBAction func anzeigenAufWebsiteSwitch(_ sender: Any) { 
    } 

    // Start des Angebot 
    @IBOutlet weak var startDesAngebotChosenDateLabel: UILabel! 
    @IBOutlet weak var startDesAngebotDatePicker: UIDatePicker! 
    @IBAction func hideShowStartDesAngebotDP(_ sender: Any) { 
     if startDesAngebotDatePicker.isHidden{ 
      startDesAngebotDatePicker.isHidden = false 
     } else{ 
      startDesAngebotDatePicker.isHidden = true 
     } 
    } 



    func setUpAllgemeineFields(product: ItemsClass){ 
     AngebotsnameTextF.text = "ABED"//product.title 
     Referenznummer.text = product.artikel_nummer 
     modelTextF.text = product.typ_kategorie 
    } 

} 

想象一下,我每个单元格都有类似的文件。

,这是我的主要浏览文件:

AddEditVC.swift

class AddEditVC: UITableViewController { 

    var product_obj: ItemsClass! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    // MARK: - Table view data source 
    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 4 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 1 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     if let cell = tableView.dequeueReusableCell(withIdentifier: "AllgemeineProduktdaten") as? AllgemeineProduktdatenCell{ 
      cell.setUpAllgemeineFields(product: product_obj) 
      return cell 
     } else{ 
      print("FFFFFFAAAAAILD") 
      return AllgemeineProduktdatenCell() 
     } 
    } 
} 

当我运行该应用程序的细胞是空白的,我甚至看不到我View秒,但我注释掉cellForRowAt函数,然后我可以看到我的outlets,但是这些字段是空的。

我该如何填充我的细胞与我的对象的领域?我应该怎么指定哪个小区被填充(我需要它也为我的其他部分的其他细胞)

UPDATE: 这是我TableViewController

enter image description here

预先感谢您的概述并且对于如此长的问题感到抱歉

+0

复杂性是'if'声明中游d?您可能还想检查'indexPath.section'以知道您正在为单元格生成哪个部分并相应地创建单元格。 –

+0

@DávidPásztor不,我直接去'else'语句,我也试着把代码放在'if indexPath.section == 0'中,但它仍然是空白的。 –

+0

你确定你已经在'Storyboard'中正确设置了单元类和重用标识符吗?您还应该尝试在'cellForRowAt'内打印'indexPath.section'并检查是否可以有条件地将该单元格转换为其相应的类。 –

回答

0

我设法通过询问另一questionAndré帮助做到这一点,我用了一个垂直UIStackView并在第一行中添加一个按钮(和任何在其他行的元素),然后添加一个IBAction到对于UIButton如下代码:

@IBAction func Section1Tapped(_ sender: Any) { 
    guard let stackView = (sender as AnyObject).superview as? UIStackView else { return } 
    guard stackView.arrangedSubviews.count > 1 else { return } 
    let sectionIsCollapsed = stackView.arrangedSubviews[1].isHidden 

    UIView.animate(withDuration: 0.25) { 
     for i in 1..<stackView.arrangedSubviews.count { 
      stackView.arrangedSubviews[i].isHidden = !sectionIsCollapsed 
     } 
    } 
} 

这将使StackView崩溃,没有必要去通过TableView小号

0

一旦您设置了所有原型单元类并重新使用标识符,就可以使用下面的代码来生成单元。既然你没有包含你的类的确切代码,这只是一个框架代码,但你应该能够填补空白。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    switch indexPath.section { 
    case 0: 
     let cell = tableView.dequeueReusableCell(withIdentifier: "AllgemeineProduktdaten") as! AllgemeineProduktdatenCell 
     cell.setUpAllgemeineFields(product: product_obj) 
     return cell 
    case 1: 
     let cell = tableView.dequeueReusableCell(withIdentifier: "OtherCellReuseIdentifier") as! OtherCellClass 
     //set up cell content 
     return cell 
    default: 
     return UITableViewCell() 
    } 
} 
+0

谢谢标识,代码,没有错误运行,但电池是白色的,我没有看到任何元素,我需要还指定只有第一个单元格?像indexPath.row == 0左右? –

+0

不,如果您将它设置正确,switch语句将为您处理该问题。将打印语句放入每个案例中,并检查它们是否实际到达。如果没有,请仔细检查您是否在“Storyboard正确”中设置了所有内容。 –

+0

所以我非常接近它,但仍然没有工作,当我使用'let cell = blabla as! ClassCell'因为“解包可选值”而崩溃了。那么我试过'如果让cell = blabla为? ClassCell'和'else'语句'返回ClassCell'。通过打印,我意识到只有'else'语句在每个'section'中被调用。任何想法为什么'if'部分不起作用?所有的标识符都建立起来了。 –

相关问题