Как скрыть просмотр при быстром нажатии на кнопку? - PullRequest
0 голосов
/ 16 июня 2020

В контроллере первого представления у нас есть две кнопки

если мы нажмем на контроллер первого представления oneButn мне нужно скрыть onebutnContainerView в контроллере второго просмотра

если мы нажимаем на контроллер первого представления secndButn мне нужно скрыть twobutnContainerView в контроллере второго просмотра

в контроллере первого представления viewController.oneButnContainerView.isHidden = true получение ошибки:

Поток 1: Неустранимая ошибка: неожиданно обнаружен ноль при неявном развертывании необязательного значения

код контроллера первого представления:

 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!

как скрыть представление контроллера второго вида в контроллере первого просмотра

1 Ответ

1 голос
/ 16 июня 2020

Это потому, что вы пытаетесь скрыть View, который еще не был инициализирован. Как правило, имейте в виду, что при создании экземпляра viewController вы можете получить доступ только к его данным, а не к его представлениям. У вас есть 2 способа исправить это:

  1. Создайте 2 переменные внутри secondViewController:

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

Присвойте значение этим двум переменным внутри firstViewController:

   let viewController = self.storyboard?.instantiateViewController(withIdentifier: "NewZoomAddressViewController") as! NewZoomAddressViewController;
    viewController.delegate = self
    viewController.isOneButnContainerViewHidden= false
    viewController.isTwoButnContainerViewHidden= true
    self.navigationController?.pushViewController(viewController, animated: true);

Теперь внутри viewDidLoad или viewWillAppear вашего secondViewController скройте / покажите ваши buttonContainerViews на основе значения Создано 2 переменных:

    oneButnContainerView.isHidden = isOneButnContainerViewHidden
    twoButnContainerView.isHidden = isTwoButnContainerViewHidden

Второй способ включает в себя принуждение viewController к компоновке своих представлений путем вызова loadViewIfNeeded () для второгоViewController перед доступом к его представлениям (в этом случае вы пытаетесь скрыть / показать просмотры).

...