Как я могу классифицировать мои TODO? - PullRequest
0 голосов
/ 21 мая 2018

У меня есть два ViewController в первом я создал tableView, где я могу вставить только текст в ячейку.В SecondViewController у меня также есть tableView с той же функцией, но КАК я могу сделать так, чтобы при нажатии на ячейку в первом tableView я мог попасть в отдельный SecondTableView (Array).

Так что я 'м, но я думаю, что функция категоризации должна быть в 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.

В обоих ViewController я могу вставить ячейку с текстом, но не знаю, как передать данные обратно: =?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

В комментариях я предложил использовать 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 первого контроллера представления, вы освобождаете эту память при освобождении второго контроллера.

0 голосов
/ 21 мая 2018

В вашем коде вы представляете свой SecondViewController двумя способами в одной и той же функции.

 self.present(vc!, animated: true, completion: nil)

и

 self.performSegue(withIdentifier: "hhh", sender: indexPath)

намерение обеих строк одинаковое, но 2 способа реализации,если мое мышление верное, вам не нужно выполнять переход (вторая строка кода, упомянутая выше, а также нет подготовки к переходу).

...