这让我感到沮丧一个星期。 到目前为止,我已经制作了三个表视图控制器:
navigationViewController
TableViewController
AddRowViewController
当我点击来自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控制器添加任何行。
有什么想法吗?
答案 0 :(得分:0)
您在此行中始终创建TableViewController
的新实例:
let MainTVC = MainTableViewController()
这个MainTVC
是TableViewController的第二个实例。但您需要提及现有的mainTVC。
有两种方法可以打开新控制器:
当您通过代码从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
如果您切换到新视图,可以在prepareForSegue
功能中设置参考。
PS: 变量应该是首字母小写,以区别于类定义