Я изучаю 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
ответ
Срикант Gundlapalli,
Все, что вам нужно сделать, это добавить вид контроллера Tableview как подвид на ваш взгляд контроллера. Чтобы упростить процесс, я лично предпочитаю использовать ContainerView,
Шаг 1: Добавьте ContainerView в контроллер View и добавьте к нему ограничения автоматического макета, потому что ваш tableView будет загружен внутри этого вид контейнера, который вы жертвуете, чтобы применять любые Автокомпоновка ограничения на ваш Tableview, чтобы держать его на месте :)
Шаг 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 знает, вы не можете ни на голосование или принять ответ, как вы не» у меня достаточно репутации :), но надеюсь, что это будет помогите кому-нибудь в будущем :)
Во-первых, спасибо за ваш ответ. Я застрял в его реализации, не могли бы вы рассказать мне несколько руководств о том, как переключить представление mapview с помощью tableview при нажатии кнопки без использования двух viewcontrollers отдельно. –
вы можете добавить вид карты и применить к нему автоматические ограничения макета, а затем добавить tableView поверх mapView и применить к нему ограничение автоматической компоновки, а затем иметь два IBOutlets один для tableView и One для mapView и нажать кнопку на основе значения тега скрыть таблицу или отображение карты соответственно :) thats all buddy :) –
Sandeep, оцените ваш довольно быстрый ответ. Я думаю, что лучше, если я расскажу вам о том, что я пытаюсь реализовать. точно так же, как я сказал в своем первом VC, у меня есть несколько объектов просмотра, а один из них - mapview. У меня есть веб-сервис, который я вызываю каждый раз с местоположением в качестве параметра, который я даю, и он возвращает несколько результатов, которые являются наборами мест, с помощью которых я делаю аннотации и показываю то же самое на карте. поскольку у меня есть выход к карте в моем FirstVC, я могу ссылаться на нее и делать все, что захочу. Если я использую представление контейнера, я могу загрузить дочерний вид (mapView) в этом, но как получить выход из него. –