Как изменить данные в одном контроллере представления на основе нажатой ячейки - PullRequest
0 голосов
/ 26 июня 2019

Я выполняю задание. В ViewController A у меня есть три ячейки: Кальций, Щелочность, Магний.Мне нужно обновить ViewController B на основе ячейки, повернутой в ViewController A. То есть, если щелочь была отмечена, метка на ViewController B должна сказать «Щелочность», если кальций нажата, ViewController 2 должен сказать, что кальций и т. Д.

Должен ли я создать переход для каждой клетки?Или я могу сделать это с помощью кода?

Я пытался использовать segue, но я чувствую, как будто это для многих segues ... Я думаю использовать теги ячеек?

пока нет ошибки

Ответы [ 3 ]

0 голосов
/ 26 июня 2019

Если вы используете простой переход для перемещения между контроллерами представления, а не для передачи данных от одного к другому, вы можете сделать что-то вроде этого.

Вам необходимо создать переменную title в ViewControllerA.

var elementName : String?   

Использование функции prepare(for segue: UIStoryboardSegue, sender: Any?)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if(segue.identifier == "SEGUE IDENTIFIER HERE") {
       var vc = segue.destinationViewController as ViewControllerB 
       vc.title = elementName
    }      
}

Вам также нужно создать экземпляр переменной title в ViewControllerB.

var title : String? 

Если вы отправите свой код, я могу дать вамболее конкретная помощь, в противном случае это поток, который вы можете использовать для выполнения этой задачи

0 голосов
/ 26 июня 2019

Вы можете создать открытую переменную в viewController B,

public var componentName : String?

затем передайте выбранное значение (из метода выбора) из ViewController A.

let ViewB = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewcontrollerB")
ViewB.componentName = componentName //get this component name from index path
self.navigationController?.show(ViewB, sender: nil)
0 голосов
/ 26 июня 2019

Вариант без сегментов:

1) В interfaz Builder присвойте идентификатор ViewControllerB

2) ViewControllerA необходимо соответствовать протоколу UITableViewDelegate (или UICollectionViewDelegate, если вы используете UICollectionView)

3) Реализовать метод tableView(_:didSelectRowAt:) в ViewControllerA

4) В методе создайте экземпляр ViewControllerB, например:

let vc = UIStoryboard(name: "nameofthestoryboard").instantiateViewController(withIdentifier: "ViewControllerB") as! ViewControllerB

5) Получить ячейку, выбранную с индексным путем.

let cell = tableview.cellForRow(at: indexPath) as! YourCellType

6) Установите необходимую информацию для viewControllerB, пример:

vc.chemicalElement = cell.chemicalElement

7) Представьте созданный вами экземпляр ViewControllerB.

present(vc, animated: true, completion: nil) 

И это все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...