Как получить родителя дочернего контроллера вида?

У меня есть контроллер представления A с сегментированным управлением, и я добавил два представления контроллера представления (B & C) в controllerA для выбора другого сегмента. У меня по одной кнопке на controllerB и controllerC. При нажатии кнопки каждого контроллера B & controllerC я собирается в контроллер D.

Как мне узнать, с какого контроллера я иду?

Я попробовал код ниже, но я думаю, что из-за представлений контроллера (B & C), добавленных к controllerA, он дает мне ноль.

guard let parent = self.parent else {return}

Как стать родителем в этом сценарии?

1 ответ

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

  • Объявите перечисление с отправителем A, B, C и т. Д.

    enum Sender {
        case A
        case B
        case C
    }
    
  • Поместите переменную в D с именем sender.

     var sender : Sender!
    
  • При инициализации VC установите его соответствующего отправителя. Если вы используете segue, используйте для подготовки к segue, чтобы установить значение.

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    
        if segue.identifier == "D" {
            let vc = segue.destination as! D
            vc.sender = B or C //As required
        }
    }
    

Затем вы можете использовать значение отправителя, чтобы сделать то, что вы хотите, на основе отправителя. Хорошо, что если вы продолжите навигацию, вы всегда можете передать значение отправителя следующим ViewControllers.

Другие вопросы по тегам