我在第一个中有两个ViewControllers我创建了一个tableView,我可以在其中只插入一个文本到一个单元格中。 在SecondViewController中我也有一个具有相同功能的tableView,我怎么能在第一个tableView中单击一个单元格时,我可以进入一个单独的SecondTableView(数组)。
所以我到目前为止,但我认为当我点击一行时,分类功能必须在didSelectRowAt中。
FirstViewController: todos:这是一个字符串数组(我想把它作为类别)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "hhh"{
//let destination = segue.destination as? UINavigationController
let vc = segue.destination as? SecondViewController
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vc = storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController
//label name
vc?.name = todos[indexPath.row]
self.present(vc!, animated: true, completion: nil)
tableView.deselectRow(at: indexPath, animated: true)
self.performSegue(withIdentifier: "hhh", sender: indexPath)
let indexpath = todos[indexPath.row]
print("indexpath:\(indexpath)")
print("row: \(indexPath.row)")
}
}
在SecondViewController中,我有SecondArray=[String]()
这些实际上是Todos。
在两个ViewControllers上,我可以插入带有文本的单元格但不知道如何传回数据:=?
答案 0 :(得分:0)
在您的代码中,您将以相同的功能以两种方式呈现SecondViewController。
self.present(vc!, animated: true, completion: nil)
和
self.performSegue(withIdentifier: "hhh", sender: indexPath)
两条线的意图相同,但2种实施方式。 如果我的想法是正确的,你不必执行segue(上面提到的第二行代码,也没有为segue方法做准备)。
答案 1 :(得分:0)
在我建议使用UISplitViewController
的评论中,因为这适用于任何类型的主/详细类型的应用程序。 (事实上,它是一个Xcode项目类型。)
但是如果你需要使用UINavigationController
,这就是我要以这种方式在两个视图之间“切换”的方式:
<强> FirstViewController:强>
@IBAction func showFrameVC() {
updateMaskImage()
self.performSegue(withIdentifier: "ShowSecondView", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ShowSecondView" {
if let vc = segue.destination as? FrameViewController {
vc.someValue = someValue
vc.firstVC = self
}
}
}
基本上,传递第一个视图控制器的实例以及您需要传递的任何数据。
<强> SecondViewController:强>
var someValue:String!
weak var subjectVC:FirstViewController!
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if isMovingFromParentViewController {
firstVC.someValue = someValue
}
}
在这里,您可以让导航控制器执行此操作,在传回其更改的数据后,将第二个视图控制器从堆栈弹出。由于您维护第一个视图控制器的weak
值,因此在释放第二个控制器时释放该内存。