Обновить контроллер одного представления в представлении контейнера - PullRequest
0 голосов
/ 22 января 2019

Надеюсь, у тебя все хорошо!

Мне нужна помощь, чтобы обновить контроллер одного представления в представлении контейнера, передав ему значение переменной. У меня есть раскадровка, которая содержит контроллер представления с представлением контейнера. Смотрите следующее изображение.

Container View

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

Теперь я добавляю контроллер вида в это контейнерное представление 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.

Пожалуйста, помогите мне решить эту проблему. Помощь будет признателен.

Спасибо заранее.

1 Ответ

0 голосов
/ 22 января 2019

Попробуйте вызвать метод обновления вашего childViewController из viewWillAppear вместо viewDidLoad, так как viewDidLoad не будет вызываться при добавлении его как childViewController.

Надеюсь, это поможет.

...