代码之家  ›  专栏  ›  技术社区  ›  Sagar Chauhan

刷新容器视图中的单视图控制器

  •  3
  • Sagar Chauhan  · 技术社区  · 7 年前

    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 回复  |  直到 6 年前
        1
  •  5
  •   iPeter    7 年前

    尝试从调用childViewController的刷新方法 viewWillAppear viewDidLoad viewDidLoad childViewController .

    希望这有帮助。