Передача данных в ViewController в Swift без перехода - PullRequest
0 голосов
/ 27 октября 2018

У меня есть два контроллера.Одним из них является просто рамка Popover.Это небольшой прямоугольник с прозрачным фоном.

У меня есть Tableview во втором контроллере, и я хочу изменить TextField в моем первом контроллере, выбрав TableView Raw во втором контроллере.

Возможно ли это?Это метод из моего первого контроллера, который создаст второй контроллер / CategoryViewController:

@IBAction func showCategoryPopup(_ sender: Any) {
        let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "categoryVC") as! CategoryViewController
        self.addChild(popOverVC)
        popOverVC.view.frame = self.view.frame
        self.view.addSubview(popOverVC.view)
        popOverVC.didMove(toParent: self)
    }

И это метод, который создаст Popover в моем втором контроллере:

func showAnimate() {
        self.view.transform = CGAffineTransform.init(scaleX: 1.3,y:1.3)
        self.view.alpha = 0.0
        UIView.animate(withDuration: 0.25) {
            self.view.alpha = 1.0
            self.view.transform = CGAffineTransform.init(scaleX: 1.0,y:1.0)
        }
    }

    func removeAnimate() {
        UIView.animate(withDuration: 0.25, animations: {
            self.view.transform = CGAffineTransform.init(scaleX: 1.3,y:1.3)
            self.view.alpha = 0.0
        }) { (finished: Bool) in
            if(finished) {
                self.view.removeFromSuperview()
            }
        }
    }

КакМогу ли я позвонить своему первому контроллеру со второго контроллера?Я пробовал так:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print(indexPath.row)

//        let myVC = storyboard?.instantiateViewController(withIdentifier: "changeBalanceCtrl") as! ChangeBalanceViewController

        let firstVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "changeBalanceCtrl") as! ChangeBalanceViewController


        firstVC.changeBalanceTextField.text! = "TEST"

    }

Я думаю, что проблема в том, что первый контроллер changeBalanceTextField.text равен нулю.Я проверил параметр self и получил два разных объекта.Поэтому я думаю, что первый контроллер, который я создаю со своим вторым контроллером, отличается.

1 Ответ

0 голосов
/ 27 октября 2018

То, что вы делаете с instantiateViewController(withIdentifier:) в делегате табличного представления, создает новый экземпляр ChangeBalanceViewController. Чтобы получить доступ к фактическому родителю второго контроллера представления, вам нужно использовать self.parent во втором контроллере представления.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if let firstVC = self.parent as? ChangeBalanceViewController {
        firstVC.changeBalanceTextField.text = "TEST"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...