Быстрое несколько подпредставлений и возвращение к первоначальному TableView - PullRequest
0 голосов
/ 17 ноября 2018

Я создал свой собственный TabView, первой вкладкой всегда является вкладка Home , которая содержит TableView. Другие 3 вкладки «Поиск», «Меню» и «Входящие» являются подпредставлениями. Я могу перейти от

  • Домой для поиска, затем Назад к дому, и это работает
  • Дом в Меню, затем Назад в Дом, и это тоже работает
  • Дом в Меню, затем Поиск и возвращение в Дом возвращает меня к подпредставлению Меню. По сути, я хочу исключить все подпредставления при нажатии на вкладку «Главная». Также каждый TabView находится в своем собственном контроллере.

Это мой код

От домашнего контроллера к контроллеру меню

@IBAction func MenuTabAction(_ sender: UIButton) {
    let Popup = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MenuC") as! MenuC

    self.addChildViewController(Popup)
    Popup.view.frame = self.view.frame
    Popup.view.tag = 100
    self.view.addSubview(Popup.view)
    Popup.didMove(toParentViewController: self)

}

От контроллера меню к домашнему контроллеру и контроллеру поиска

   @IBAction func HomeTabAction(_ sender: UIButton) {
        if let viewWithTag = self.view.viewWithTag(100) {
            print("Tag 100")
            viewWithTag.removeFromSuperview()
        }

    }

       @IBAction func SearchTabAction(_ sender: UIButton) {

    let Popup = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LocalSearchC") as! LocalSearchC
    Popup.view.frame = self.view.frame
    Popup.view.tag = 100
    self.view.addSubview(Popup.view)
    Popup.didMove(toParentViewController: self)
}

Я предполагаю, что удаление суперпредставления удаляет только 1 суперпредставление за раз, поэтому, если я перейду с Subview1 на subview2, затем щелкните HomeTab, и я перейду к subview1 вместо оригинального HomeTab. Есть ли способ удалить все суперпредставления / подпредставления при нажатии вкладки «Главная»?

enter image description here

Ответы [ 2 ]

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

На самом деле вам не нужно вручную создавать экземпляры контроллеров представления (LocalSearch, Menu). TabViewcontrollers могут связать виртуальный канал с каждым элементом вкладки через переход. Фактически, когда вы добавляете ваш tabvc в проект, он поставляется с двумя контроллерами представления, каждый из которых подключен к элементу в представлении вкладок, и все, вам просто нужно заменить или адаптировать их, не нужно их «загружать».

Единственный сценарий, в котором вам нужно это сделать, - это если ваши кнопки были «динамическими», то есть загружаемый контент изменяется в зависимости от некоторых других обстоятельств. Пока нажатие кнопки «Поиск» переходит к LocalSearchViewController, просто свяжите его с переходом на раскадровку.

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

Каждая вкладка имеет свой собственный контроллер вида. В идеале, вы должны removeFromSuperview все контроллеры, которые вы не показываете.

На ваш код, вы только removeFromSuperView на HomeTabAction.

Попробуйте изменить это:

if let viewWithTag = self.view.viewWithTag(100) {
    print("Tag 100")
    viewWithTag.removeFromSuperview()
}

до

for v in self.view.subviews {
    if v.tag == 100 {
        v.removeFromSuperview()
    }
}

Но, пожалуйста, имейте в виду, что каждый раз, когда пользователь нажимает какие-либо вкладки, не возвращаясь домой ( т.е.: многократно нажимая между Меню и Поиском), похоже, что вы просто создаете множество контроллеров, без удаляя их.

Вы должны удалять другие виды каждый раз, когда создается новый. Было бы целесообразно назначить уникальный тег каждому контроллеру представления и удалять скрытые другие после каждого изменения, а не только при возвращении на главную страницу. Или, по крайней мере, проверьте, создан ли контроллер представления с данным типом, прежде чем создавать новый.

...