2017-08-11 53 views
0

我有一個表格視圖,當您點擊其中一行時,它會實例化另一個UITableViewController。不過,我得到這個代碼:must register a nib or a class for the identifier or connect a prototype cell in a storyboard必須註冊一個筆尖或類的標識符或連接故事板中的原型單元格

這裏是故事板:

enter image description here

這裏是我的代碼

第一的UITableViewController

class MainActivityViewController: UITableViewController { 

    let node = MenuStructure.structure.childenNode 

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 
     cell.textLabel?.text = node[indexPath.row].value 
     return cell 
    } 

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     let selectedNode = node[indexPath.row] 
     let subMenuViewController = SubMenuViewController(node: selectedNode) 

     navigationController?.pushViewController(subMenuViewController, animated: true) 

    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     //self.navigationItem.title = MenuStructure.structure.value 

    } 
} 

然後當你點擊進入其中一行將繼續到這個UITableViewController

class SubMenuViewController: UITableViewController { 

    let node: Node 

    init(node: Node) { 
     self.node = node 
     super.init(nibName: nil, bundle: nil) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("required initializer not implemented") 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return node.childenNode.count 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     tableView.register(UITableViewCell, forCellReuseIdentifier: "cell") 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 
     cell.textLabel?.text = node.childenNode[indexPath.row].value 
     return cell 
    } 

    override func viewDidLoad() { 
    } 
} 

我試過註冊我的細胞,但我不明白如何以及不知道該把它放在哪裏。

歡迎任何建議!謝謝!

更新的代碼

class SubMenuViewController: UITableViewController { 

    let node: Node 

    init(node: Node) { 
     self.node = node 
     super.init(nibName: nil, bundle: nil) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("required initializer not implemented") 
    } 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return node.childenNode.count 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 
     cell.textLabel?.text = node.childenNode[indexPath.row].value 
     return cell 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.register(UITableViewController.self, forCellReuseIdentifier: "cell") 
    } 
} 
+0

您是否設置了cel l故事板中的標識符?請參閱https://stackoverflow.com/questions/27066205/how-to-connect-a-prototype-cell-in-a-storyboard – nathan

+0

我試圖實例化的控制器不在故事板中,所以我不能設置我的手機標識 –

+0

它在哪裏?你只使用代碼創建它? – nathan

回答

1

你應該在viewDidLoad方法寄存器單元,因爲這樣就可以註冊一次這個方法被調用一次,然後實現代碼如下將由dequeing

重用此類型的細胞

請修改您的代碼,如下所示:

class SubMenuViewController: UITableViewController { 

     let node: Node 

     init(node: Node) { 
      self.node = node 
      super.init(nibName: nil, bundle: nil) 
     } 

     required init?(coder aDecoder: NSCoder) { 
      fatalError("required initializer not implemented") 
     } 

     override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
      return node.childenNode.count 
     } 

     override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

      let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 
      cell.textLabel?.text = node.childenNode[indexPath.row].value 
      return cell 
     } 

     override func viewDidLoad() { 

      super.viewDidLoad() 
      tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") 

     } 
    } 
+0

感謝「MainActivityViewController」,但錯誤依然存在.... –

+0

@BrendonCheung請出示您的更新代碼 – 3stud1ant3

+0

請參閱更新的代碼,感謝 –

相關問題