Лист формы не определяется при смахивании вниз - PullRequest
2 голосов
/ 12 июля 2020

У меня есть родительский контроллер представления и контроллер дочернего представления. У меня есть кнопка, которая может отображать этот дочерний контроллер представления. Кнопка выполняет следующие действия: self.performSegue(withIdentifier: "showComments", sender: self). Я также подготовил переход и поставил segue.destination.presentationController?.delegate = self. Я поместил UIAdaptivePresentationControllerDelegate в свой контроллер представления и попытался добавить эту функцию:

public func presentationControllerDidDismiss(
        _ presentationController: UIPresentationController)
      {
        print("dismissed")
      }

Когда я пытаюсь перетащить лист формы, он ничего не печатает, говоря мне, что здесь что-то не так. Есть ли причина, по которой это происходит?

Изменить: вот мой контроллер представления:


import UIKit

class ViewController: UIViewController, UIAdaptivePresentationControllerDelegate {
    func presentationControllerWillDismiss(_: UIPresentationController) {
        print("yep2")
        viewWillAppear(true)
    }
    @IBOutlet weak var commentImage: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        let vc = CommentingViewController()
        vc.presentationController?.delegate = self
        let tappp = UITapGestureRecognizer(target: self, action:#selector(ChannelVideoViewController.tapppFunction))
        commentImage.addGestureRecognizer(tappp)
        // Do any additional setup after loading the view.
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    {
            if segue.destination is CommentingViewController {
                if segue.identifier == "showComments" {
                    segue.destination.presentationController?.delegate = self
                }
            }
    }
    var isDismissed: Bool = true
    @objc func tapppFunction(sender:UITapGestureRecognizer) {
        isDismissed = true
        self.performSegue(withIdentifier: "showComments", sender: self)
    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(true)
        isDismissed = true
        print("View Disappeared")
    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)
        isDismissed = false
        print("view appeared")
    }
}

Изменить 2: я не уверен, помогает ли это, но у меня также есть мой ребенок просмотр контроллера в другой раскадровке.

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Вероятно, проблема возникает из-за того, что delegate не устанавливается. Измените метод prepare(for:,sender:) на следующее:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? CommentingViewController {
        destination.presentationController?.delegate = self
    } else {
        print("Not CommentingViewController")
        segue.destination.presentationController?.delegate = self
    }
}
0 голосов
/ 12 июля 2020

В моем первоначальном вопросе я фактически поставил модифицированную версию своего контроллера представления, поскольку он был довольно большим и беспорядочным с другими вещами. Посмотрев на свой prepare(for:,sender:), я понял, что проверяю неправильный контроллер представления (Фракенштейн вроде как помог мне его найти). Вот о чем я говорю:

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    {
        if segue.destination is OtherViewController
        {
            if let vc = segue.destination as? OtherViewController {
                if segue.identifier == "showOther" {
                    vc.other = self.other
                }
            } else if segue.destination is CommentingViewController {
                if segue.identifier == "showComments" {
                    segue.destination.presentationController?.delegate = self
                }
            }
        }
    }

Значит, это работало не слишком хорошо. Но он работает через ссылки на раскадровку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...