2017-08-15 6 views
0

この質問は以前は聞いたことがありますが、解決策が見つかりませんでした。 私はとスタティックcellsを持っています。私は4 sections(これまで)を持っていて、それぞれcellしか持っていません。UITableViewController異なるセクションのセルに値を設定する

この最初のセクションの最初のセル

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が表示されますが、フィールドは空です。

オブジェクトのセルのフィールドをどのように埋めることができますか?事前にありがとうござい これは私のTableViewController

enter image description here

の概要です:どのように私はどのセルを充填することを指定します(私は他のセクションの私の他の細胞にも、それを必要とする)

更新する必要がありますこのような長い質問にごめんなさい

+0

の複雑さを通過する必要が 'if'ステートメントreacheではありませんd?また、 'indexPath.section'をチェックして、セルを生成しているセクションを知り、それに応じてセルを作成することもできます。 –

+0

@DávidPásztorいいえ私は 'else'ステートメントに直接行きますが、' if indexPath.section == 0'にコードを入れてみましたが、まだ空白です。 –

+0

'Storyboard'でセルクラスを設定し、識別子を正しく再利用していますか?また、 'cellForRowAt'の中に' indexPath.section'を印刷して、条件付きでセルを対応するクラスにキャストできるかどうか確認してください。 –

答えて

0

I次いでにIBActionを追加し、Iが垂直UIStackViewを使用し、最初の行のボタンを追加し(そしてどのような他の行の要素)、Andréの助けを借りて別のquestionを尋ねることによってそれを行うために管理次のように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

いいえ、スイッチステートメントは、あなたがそれを正しく設定した場合、それを処理します。 print文を各ケースに入れ、実際に到達しているかどうかを確認します。そうでない場合は、 'Storyboard正しく 'のすべてを設定していることを再度確認してください。 –

+0

私はそれにとても近いですが、私は 'let cell = blabla asを使ったときにはまだ動作していません! ClassCell'は 'オプション値のアンラッピング 'のためにクラッシュしていました。私は 'let cell = blabla as if let? ClassCell'と 'else'文中に' return ClassCell'があります。印刷することによって、 'else'文だけが各' section'で呼び出されることが分かりました。 'if'の部分がうまくいかない理由は何ですか?すべての識別子が設定されます。 –

関連する問題