Делегат возвращает ноль и не вызывается - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть оверлей, который я хочу удалить при нажатии на button, тем самым отклоняя ViewController.Я отладил, и delegate в настоящее время возвращает ноль.Я не уверен, что я делаю не так здесь.Я пропустил реализацию чего-то еще?Я даже опробовал операторы печати, но ничего не вижу.

protocol DismissOverlayDelegate: class {
    func dismissOverlay(_ sender: PlayersViewController)
}

class PlayersViewController: UIViewController {

    weak var delegate: DismissOverlayDelegate?

    @IBAction func getStartedTapped(_ sender: UIButton) {
        self.delegate?.dismissOverlay(self)
    }
}

и в моем ViewController, где я реализую метод delegate

class HomeViewController: UIViewController, DismissOverlayDelegate {

    @IBOutlet weak var customOverlay: CustomOverlayView!

    let playersViewController = PlayersViewController()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.playersViewController.delegate = self
    }

    func dismissOverlay(_ sender: PlayersViewController) {
        self.customOverlay.removeFromView()
    }
}

делегат = (DismissOverlayDelegate?) Ноль

PlayersViewController встроен в UIPageViewController

class HomeViewController: UIPageViewController, UIPageViewControllerDataSource {

    var pages = [UIViewController]()

    override func viewDidLoad() {
        super.viewDidLoad()
        for storyboardIDs in ["playersVC1","playersVC2"] {
            let viewController = self.storyboard?.instantiateViewController(withIdentifier: storyboardIDs)
            self.pages.append(viewController!)
        }
        self.dataSource = self
        self.setViewControllers([self.pages.first!], direction: .forward, animated: true)
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        let currentIndex = self.pages.firstIndex(of: viewController)!
        if currentIndex > 0 {
            return self.pages[currentIndex - 1]
        }
        return nil
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        let currentIndex = self.pages.firstIndex(of: viewController)!
        if currentIndex < (self.pages.count - 1) {
            return self.pages[currentIndex + 1]
        }
        return nil
    }
}

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Позвольте мне объяснить вам, используете ли вы или хотите использовать делегат для вызова или реализовать что-то, что есть в root, и вы должны сделать это правильно.У вас все хорошо, не проблема, но реализация делегата не совсем правильная, ваш метод не может принять это, поэтому попробуйте это: -

Ваш контроллер Home View

class HomeViewController: UIViewController, DismissOverlayDelegate {

    @IBOutlet weak var customOverlay: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func dismissOverlay(_ sender: PlayersViewController) {
        self.customOverlay.removeFromSuperview()
    }

    @IBAction func go(_ sender: UIButton) {
        let vc = self.storyboard?.instantiateViewController(withIdentifier: "PlayersViewController") as! PlayersViewController
        vc.delegate = self
        self.navigationController?.pushViewController(vc, animated: true);
    }
}

это VC вашей игровой площадки

protocol DismissOverlayDelegate: class {
    func dismissOverlay(_ sender: PlayersViewController)
}

class PlayersViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    weak var delegate: DismissOverlayDelegate?

    @IBAction func getStartedTapped(_ sender: UIButton) {
        self.delegate?.dismissOverlay(self)
    }

}

теперь надеюсь, что вы понимаете, что вы должны делать ...!

0 голосов
/ 23 ноября 2018

Кажется, что PlayersViewController () не так.Вы должны использовать instantiateInitialViewController () или instantiateInitialViewController () при использовании StoryBoard.

https://developer.apple.com/documentation/uikit/uistoryboard/1616214-instantiateviewcontroller

https://developer.apple.com/documentation/uikit/uistoryboard/1616213-instantiateinitialviewcontroller

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