点击按钮 swift 时如何隐藏视图?

How to HIDE View when tap on button swift?

在第一个视图控制器中我们有两个按钮

如果我们点击第一个视图控制器oneButn我需要在第二个视图控制器中隐藏onebutnContainerView

如果我们点击第一个视图控制器secndButn,我需要在第二个视图控制器中隐藏twobutnContainerView

在第一个视图控制器中 viewController.oneButnContainerView.isHidden = true 出现错误:

Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value

第一次查看控制器代码:

 class firstViewController: UIViewController{
 @IBAction func oneButn(_ sender: UIButton) {
    self.view.endEditing(true)

    let viewController = self.storyboard?.instantiateViewController(withIdentifier: "NewZoomAddressViewController") as! NewZoomAddressViewController;
                viewController.delegate = self

            viewController.oneButnContainerView.isHidden = true
            viewController.twobutnContainerView.isHidden = false

                self.navigationController?.pushViewController(viewController, animated: true);

}
@IBAction func secndButn(_ sender: UIButton) {
    self.view.endEditing(true)

    let viewController = self.storyboard?.instantiateViewController(withIdentifier: "NewZoomAddressViewController") as! NewZoomAddressViewController;
                viewController.delegate = self

              viewController.oneButnContainerView.isHidden = false

            viewController.twobutnContainerView.isHidden = true

                self.navigationController?.pushViewController(viewController, animated: true);
 }
}

我在第二个视图控制器中有两个视图的出口

     @IBOutlet weak var oneButnContainerView: UIView!
     @IBOutlet weak var twoButnContainerView: UIView!

如何在 firstviewcontroller 中隐藏 seconviewcontroller 视图

那是因为您试图隐藏尚未初始化的视图。根据经验,请记住当您实例化一个 viewController 时,您只能访问它的数据而不能访问它的视图。您有 2 种方法可以解决此问题:

  1. 在 secondViewController 中创建 2 个变量:

var isOneButnContainerViewHidden: Bool = false var isTwoButnContainerViewHidden: Bool = false

  1. 为 firstViewController 中的这 2 个变量赋值:

       let viewController = self.storyboard?.instantiateViewController(withIdentifier: "NewZoomAddressViewController") as! NewZoomAddressViewController;
        viewController.delegate = self
        viewController.isOneButnContainerViewHidden= false
        viewController.isTwoButnContainerViewHidden= true
        self.navigationController?.pushViewController(viewController, animated: true);
    
  2. 现在在您的 secondViewController 的 viewDidLoad 或 viewWillAppear 中,hide/show 您的 buttonContainerViews 基于创建的 2 个变量的值:

    oneButnContainerView.isHidden = isOneButnContainerViewHidden
    twoButnContainerView.isHidden = isTwoButnContainerViewHidden

第二种方法涉及在访问其视图之前通过在 secondViewController 上调用 loadViewIfNeeded() 来强制 viewController 布局其视图(在这种情况下,您正在尝试 hide/show 视图)。