Надеюсь, у тебя все хорошо!
Мне нужна помощь, чтобы обновить контроллер одного представления в представлении контейнера, передав ему значение переменной. У меня есть раскадровка, которая содержит контроллер представления с представлением контейнера. Смотрите следующее изображение.
Общий объем продаж по пользователям компании изменяется в зависимости от контроллера представления выбора, это означает, что он обновит мой контроллер представления для других данных.
Теперь я добавляю контроллер вида в это контейнерное представление DashbordVC
программно, используя следующий код:
var previousViewController : UIViewController?
var selectedIndex : Int = 0
// TopSalesVC - Instantiate ViewController
private lazy var topSalesVC: TopSalesVC = {
var vc = TopSalesVC.viewController()
self.addChildViewController(vc)
return vc
}()
// Methods
override func viewDidLoad() {
super.viewDidLoad()
self.setupView()
}
//------------------------------------------------------------------------------
func setupView() {
self.previousViewController = self.topSalesVC
self.add(asChildViewController: self.topSalesVC)
}
//------------------------------------------------------------------------------
private func add(asChildViewController viewController: UIViewController) {
self.addChildViewController(viewController)
self.containerView.addSubview(viewController.view)
viewController.view.frame = self.containerView.bounds
viewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
viewController.didMove(toParentViewController: self)
}
//------------------------------------------------------------------------------
private func remove(asChildViewController viewController: UIViewController) {
viewController.willMove(toParentViewController: nil)
viewController.view.removeFromSuperview()
viewController.removeFromParentViewController()
}
Этот код работает для загрузки представления, но когда я переключаюсь на строку контроллера представления средства выбора и нажимаю кнопку «Готово», он ничего не делает.
Теперь мой код для представления выбора didSelect
строка выглядит следующим образом:
override func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
self.selectedIndex = row
}
Я сделал кнопку на панели инструментов в окне выбора, поэтому при нажатии на нее выполните следующий код:
@IBAction func btnDoneClicked(_ sender: UIBarButtonItem) {
BaseVC.isPickerOpen = false
self.showPicker(false) { (success) in
if self.previousViewController != nil {
self.remove(asChildViewController: self.previousViewController!)
}
switch self.selectedIndex {
case 0:
.....
.....
break
case 1:
.....
.....
break
case 2:
.....
.....
break
case 3:
.....
.....
break
case 4:
self.topSalesVC.salesBy = .invoiceByCustomer
self.previousViewController = self.topSalesVC
self.add(asChildViewController: self.topSalesVC)
break
case 5:
self.topSalesVC.salesBy = .invoiceByUser
self.previousViewController = self.topSalesVC
self.add(asChildViewController: self.topSalesVC)
break
case 6:
self.topSalesVC.salesBy = .supplier
self.previousViewController = self.topSalesVC
self.add(asChildViewController: self.topSalesVC)
break
case 7:
self.topSalesVC.salesBy = .manufacturer
self.previousViewController = self.topSalesVC
self.add(asChildViewController: self.topSalesVC)
break
case 8:
self.topSalesVC.salesBy = .masterProduct
self.previousViewController = self.topSalesVC
self.add(asChildViewController: self.topSalesVC)
break
case 9:
self.topSalesVC.salesBy = .user
self.previousViewController = self.topSalesVC
self.add(asChildViewController: self.topSalesVC)
break
case 10:
self.topSalesVC.salesBy = .customer
self.previousViewController = self.topSalesVC
self.add(asChildViewController: self.topSalesVC)
break
case 11:
self.topSalesVC.salesBy = .customerTag
self.previousViewController = self.topSalesVC
self.add(asChildViewController: self.topSalesVC)
break
default:
break
}
}
}
Рассматривает метод, описанный выше, в случае с 4 по 11, в которых используется один и тот же контроллер представления, просто измените его значение переменной и добавьте его в представление контейнера.
Так что моя проблема в том, что когда я меняю значение представления выбора для обновления данных для одного контроллера представления, это никак не влияет на контроллер представления. Отображать те же данные и изначально доступны.
Я проверил TopSalesVC, и есть код, который работает абсолютно нормально, поэтому нет проблем с кодом TopSalesVC.
Пожалуйста, помогите мне решить эту проблему. Помощь будет признателен.
Спасибо заранее.