0

Я изучаю iOS с несколькими примерами проектов. У меня есть два контроллера вида, в которых первый VC имеет несколько кнопок и mapview, а второй VC имеет tableview, показывающий набор результатов. Я вставляю оба viewcontrollers в navigationViewController. Щелкнув по кнопке от First VC, я могу показать tableview (используя show segue) и вернуться к первой VC через навигацию. Теперь мой запрос: я хочу отобразить tableview (второй VC) вместо одного объекта вида (вида карты), определенного в firstVC, а не полностью заполнять представление таблицы полностью в полноэкранном режиме. Моя проблема заключается в том, чтобы показать другой Viewcontroller. Я все еще хочу видеть несколько viewobjects из firstVC, поэтому я пытаюсь отобразить secondVC поверх mapview, когда я нажимаю кнопку, которая запускает segue. Я должен использовать один интерфейс, поэтому я необходимо загрузить результаты tablview из SecondVC в firstVC, заменив вид mapView на tableview. Пожалуйста, дайте мне знать ваши идеи, если это возможно, и любые другие идеи для достижения того же самого приветствуются.Toggle ViewController Views

ответ

0

Срикант Gundlapalli,

Все, что вам нужно сделать, это добавить вид контроллера Tableview как подвид на ваш взгляд контроллера. Чтобы упростить процесс, я лично предпочитаю использовать ContainerView,

Шаг 1: Добавьте ContainerView в контроллер View и добавьте к нему ограничения автоматического макета, потому что ваш tableView будет загружен внутри этого вид контейнера, который вы жертвуете, чтобы применять любые Автокомпоновка ограничения на ваш Tableview, чтобы держать его на месте :)

например: enter image description here

Шаг 2: Перетащите IBOutlet в контейнере view.lets называют его как containerView :)

Шаг 3: Теперь вам нужно иметь два v iew контроллер 1 для загрузки карты и 1 для загрузки tableView, или у вас будет отображение карты в качестве подсмотра вашего представления, и вы либо скроете его, либо удалите, и добавите вид контейнера, но я лично предпочитаю иметь код чистым n аккуратным, поэтому я предпочитаю иметь два разные VCs

поэтому позволяет создавать 2 VCs позволяет называть их как viewController1 & viewController2 Savy ??

Шаг 4: позволяет написать метод, который на самом деле загружает VC и добавляет свое мнение, как подвид к вашему ViewController

func changeEmbededVC(for status : Int) { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     if status == 0 { 
      mehereButton.tag = 1 
      let vc = storyboard.instantiateViewController(withIdentifier: "viewController1") 
      vc.willMove(toParentViewController: self) 
      containerView.addSubview(vc.view) 
      self.addChildViewController(vc) 
      vc.didMove(toParentViewController: self) 
     } 
     else { 
      mehereButton.tag = 0 
      let vc = storyboard.instantiateViewController(withIdentifier: "viewController2") 
      vc.willMove(toParentViewController: self) 
      containerView.addSubview(vc.view) 
      self.addChildViewController(vc) 
      vc.didMove(toParentViewController: self) 
     } 

    } 

Я считаю, что код говорит само за себя: D теперь, что это mehereButton.tag = 1 ?? Простой вы хотите, чтобы переключить вид на нажатие кнопок не вы: D, следовательно, я создал IBOutlet для mehereButton и меняет свой тег :)

теперь, наконец, в IBAction из mehereButton

@IBAction func buttonTapped(_ sender: UIButton) { 
    self.changeEmbededVC(for: self.mehereButton.tag) 
} 

, но нам нужно нагрузка одна из представления по умолчанию не так: D так изменить viewDidAppear к

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    self.changeEmbededVC(for: 0) 
} 

Надежда Я ответил на ваш вопрос в деталях: PI знает, вы не можете ни на голосование или принять ответ, как вы не» у меня достаточно репутации :), но надеюсь, что это будет помогите кому-нибудь в будущем :)

+0

Во-первых, спасибо за ваш ответ. Я застрял в его реализации, не могли бы вы рассказать мне несколько руководств о том, как переключить представление mapview с помощью tableview при нажатии кнопки без использования двух viewcontrollers отдельно. –

+0

вы можете добавить вид карты и применить к нему автоматические ограничения макета, а затем добавить tableView поверх mapView и применить к нему ограничение автоматической компоновки, а затем иметь два IBOutlets один для tableView и One для mapView и нажать кнопку на основе значения тега скрыть таблицу или отображение карты соответственно :) thats all buddy :) –

+0

Sandeep, оцените ваш довольно быстрый ответ. Я думаю, что лучше, если я расскажу вам о том, что я пытаюсь реализовать. точно так же, как я сказал в своем первом VC, у меня есть несколько объектов просмотра, а один из них - mapview. У меня есть веб-сервис, который я вызываю каждый раз с местоположением в качестве параметра, который я даю, и он возвращает несколько результатов, которые являются наборами мест, с помощью которых я делаю аннотации и показываю то же самое на карте. поскольку у меня есть выход к карте в моем FirstVC, я могу ссылаться на нее и делать все, что захочу. Если я использую представление контейнера, я могу загрузить дочерний вид (mapView) в этом, но как получить выход из него. –