如何对我的TODO进行分类?

时间:2018-05-21 12:02:47

标签: swift uitableview tableview categories

我在第一个中有两个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上,我可以插入带有文本的单元格但不知道如何传回数据:=?

2 个答案:

答案 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值,因此在释放第二个控制器时释放该内存。