2017-09-29 4 views
1

私はすべての私のアプリ全体に使用したいと思うtableviewのサブクラスを作成するために探しています。私の問題は、テーブルビューがまだ空である変数fieldsを設定したときです。私は、新しいViewControllerでfields変数が正しく設定されていないと仮定しています。事前に助けてくれてありがとう。他のviewControllersで使用するためにUITableViewをサブクラス化する方法

MYSUBCLASS

import UIKit 
import LGButton 

class RquestTableViewController: UITableViewController { 
    var fields:[UIView] 

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

    func viewSetup(){ 
     tableView.register(CustomFormCell.self, forCellReuseIdentifier: labelReuseCellIdentifier) 
     self.tableView.tableFooterView = UIView.init(frame: CGRect.zero) 

    } 
} 
//MARK: Delegate 
extension RquestTableViewController { 
    override func numberOfSections(in tableView: UITableView) -> Int { 
     return fields.count 
    } 
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: self.labelReuseCellIdentifier, for: indexPath) as! CustomFormCell 
     let itemView = fields[indexPath.row] 
     cell.viewPassed = itemView 
     cell.backgroundColor = .clear 
     if let _ = itemView as? UILabel { 
      cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0) 
      return cell 
     } 
     if let _ = itemView as? UIButton { 
      cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0) 
      return cell 
     } 
     if let _ = itemView as? LGButton { 
      cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0) 
      return cell 
     } 
     return cell 
    } 
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
     return 40.0 
    } 
} 

MyNewViewController

class NewRquestViewController: RquestTableViewController { 

    lazy var password:JVFloatLabeledTextField = { 
     let v = JVFloatLabeledTextField() 
     v.placeholder = "Password" 
     return v 
    }() 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     fields = [password] 
    } 
} 
+1

リロードする必要があります –

答えて

0

あなたがfieldsが本当に適切に設定されていないことを確認したことがありますか?なぜそうでないのかはわかりません。しかし、もう1つの問題があります。numberOfSections(in:)tableView(_,cellForRowAt:)を上書きする以外に、tableView(_,numberOfRowsInSection:)を上書きする必要があります。今あなたが持っているのはnumberOfSections(in:)ですが、フィールドの数が返されますが、tableView(_,cellForRowAt:)はフィールドにの行を入力する予定です。つまり、tableView(_,cellForRowAt:)は、section0の場合、のみがとなるため、ほとんどの場合1つのフィールドしか表示されません。代わりに、numberOfSections(in:)1に返すように変更し、を返すようにtableView(_,numberOfRowsInSection:)を実装します。

+0

ありがとう、ちょうどregisterCellは新しいviewControllerから呼び出す必要があることに注意してください – pprevalon

+0

それはありますか?私はそれを考慮していないだろう。 – NRitH

関連する問題