从另一个tableview插入行

时间:2017-02-26 15:43:01

标签: swift uitableview row

这让我感到沮丧一个星期。 到目前为止,我已经制作了三个表视图控制器:

  1. navigationViewController
  2. TableViewController
  3. AddRowViewController
  4. 当我点击来自AddRowViewController的行" +添加行..."

    时,TableViewController会被访问

    我希望用户点击" +添加行",访问AddRowViewController,然后点击指定的行在TableViewController的底部添加一行。完成后,它将返回TableViewController

    override func tableView (tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
      switch indexpath.row {
        case 0:
          let MainTVC = TableViewController()
          MainTVC.RowNames.append("Name")
          MainTVC.insertRows(at:[MainTVC.newRowLoc], with:none)
          print("The Row Name is added below")
        case 1:
          print("Age")
        case 2:
          print("Gender")
        default:
          print("nil")
      }
    }
    

    我尝试使用MainTVC实例添加此代码,我认为这是为什么它不会向TableView控制器添加任何行。

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

问题

您在此行中始终创建TableViewController的新实例:

let MainTVC = MainTableViewController()

这个MainTVC是TableViewController的第二个实例。但您需要提及现有的mainTVC。

有两种方法可以打开新控制器:

1)按代码

当您通过代码从AddRowViewController创建TableViewController时,您可以保留对TableViewController的引用。

示例:

AddRowViewController:

class AddRowViewController {
    var weak mainTVC: MainTableViewController?


    func addRowToMainTVC(item: String{
       // let MainTVC = MainTableViewController() <-- you don't need it here you 
       //                                             you still have a reference
       mainTVC?.rowNames.append("Name") // <-- here you use the reference you hold


      // but i advice to put the logic how to insert into the MainVC
      // use for example the new addRow and not outside logic

      mainTVC?.addRow("Name")
}

MainTableViewController:

class MainTableViewController {

  // ...

  func showAddRowVC {
    let addRowVC = AddRowViewController()
    addRowVC.mainTVC = self // <-----
    self.navigationController?.pushViewController(addRowVC, animated: true) 
  }
  // ...

  func addRow(item: String){
    rowNames.apppend(item)
    self.reloadData() <-- for example you can say to the table to reload it self
  }

}

或者您创建一个便利初始化程序,您可以在其中引用mainTVC

2。 by segue

如果您切换到新视图,可以在prepareForSegue功能中设置参考。

PS: 变量应该是首字母小写,以区别于类定义