Представление одного ViewController поверх другого частично - PullRequest
0 голосов
/ 02 октября 2018

У меня есть MapViewController, который в основном равен MKMapView и представляет карту с пользовательскими аннотациями.

Сейчас я пытаюсь представить еще один ViewController снизу, содержащий дополнительные фильтры, которые будут доступны пользователю.возможность использовать в своем путешествии.

Однако я столкнулся с проблемой, когда представляю нового FilterMenuViewController как ребенка MapViewController, MapViewController исчезает.

Этокак это выглядит:

Исходное состояние

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

Новый контроллер представлен, ноисчезновение MapViewController

Код, обеспечивающий взаимодействие, выглядит следующим образом:

MapViewController объявление переменных:

var filterMenuVC = FilterMenuViewController()
var isFilterMenuOpened = false

MapViewController viewDidLoad():

    filterMenuVC = storyboard?.instantiateViewController(withIdentifier: "FilterMenuViewController") as! FilterMenuViewController

MapViewController showFilterMenu действие кнопки:

@IBAction func showFilterMenu(_ sender: UIButton) {
    // Presents the filter menu
    if isFilterMenuOpened == true {
        isFilterMenuOpened = false
        filterMenuVC.willMove(toParentViewController: nil)
        filterMenuVC.view.removeFromSuperview()
        filterMenuVC.removeFromParentViewController()
    } else if isFilterMenuOpened == false {
        isFilterMenuOpened = true
        self.addChildViewController(filterMenuVC)
        self.view.addSubview(filterMenuVC.view)
        filterMenuVC.didMove(toParentViewController: self)
    }
} 

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Попробуйте, вид сверху и снизу, вот изображение: https://imgur.com/a/gzIGjEa

if isFilterMenuOpened{
            if let searching = self.childViewControllers.first as? ViewController{
                UIView.animate(withDuration: 0.7, animations: {
                    searching.view.frame = CGRect.init(x: 0,
                                                       y: self.view.frame.origin.y-308,
                                                       width: self.view.frame.size.width,
                                                       height: 308)
                }, completion: {(boos) in
                    searching.removeFromParentViewController()
                    searching.dismiss(animated: true, completion: nil)
                    self.isFilterMenuOpened = false
                })
            }
        }else{
            let search = self.storyboard?.instantiateViewController(withIdentifier: "searchView") as! ViewController
            search.view.frame = CGRect.init(x: 0, y: self.view.frame.origin.y-308, width: self.view.frame.size.width, height: 308) //The View controller height same size of your view in storyboard
            search.delegateSearch = self
            self.addChildViewController(search)
            UIView.animate(withDuration: 0.5, animations: {
                search.view.frame = CGRect.init(x: 0, y: self.view.frame.origin.y, width: self.view.frame.size.width, height: 308)
            })
            self.view.addSubview(search.view)
            self.didMove(toParentViewController: search)
            isFilterMenuOpened = true
        }
0 голосов
/ 02 октября 2018

Проблема заключалась в том, что я создал последовательное «шоу» для кнопки в ViewController, которая конфликтовала с добавлением контроллера в текущее представление, вместо этого он выдвинул его, и MapViewController был освобожден.

Так что япросто удалил переход с sotryboard и добавил ребенка программно, теперь он работает как шарм.

Была глупая ошибка, но, возможно, это поможет кому-то, кто столкнется с той же проблемой:)

...