2016-05-18 2 views
1

У меня есть 4 ViewControllers в моей раскадровке. Я хочу, чтобы все они имели доступ к моему ViewController «Настройки» с помощью функции performSegue. Возможно ли, чтобы для этого выполнялся ONE segue, вместо ctrl + перетаскивание из каждого ViewController в мой «Настройки» ViewController?One segue, чтобы управлять ими все

+0

Если вы хотите использовать segue, тогда от каждого источника до места назначения должен быть отрыв. В качестве альтернативы вы можете просто создать экземпляр диспетчера представлений настроек и нажать/представить его без использования segue – Paulw11

+0

Я боялся этого ответа. Тот факт, что мне приходится перетаскивать сегменты из всех четырех контроллеров в один и тот же, является уродливым, но если мне нужно будет –

ответ

3

Нет его невозможно с помощью одного сеанса. Вам нужно 4 разных segues от 4 различных ViewControllers. Но вы можете сделать это программно.

сделать расширение для UIVIewController

extension UIViewController 
{ 
    func showSettingsScreen() 
    { 
     let storyBoard = UIStoryboard(name: "YourStoryBoardName", bundle:nil) 
     let settingsScreen = storyBoard.instantiateViewControllerWithIdentifier("YourSettingsViewControllerID") 
     self.navigationController?.pushViewController(settingsScreen, animated: true) 
    } 
} 

Теперь вы можете позвонить showSettingsScreen() от любого из контроллеров зрения (Убедитесь, что этот вид контроллер имеет навигационный контроллер).

+0

Это может сработать. Я дам ему один раз на компьютере. –

0

Я действительно не думаю, что есть способ сделать это. U должно соединить ур SettingsViewController все ваши 4 View Controllers, добавьте SEGUE, и определить идентификатор SEGUE, который используется в

prepareForSegue:sender: 
or 
shouldPerformSegueWithIdentifier:sender: 

методов. U может получать доступ через эти идентификаторы. Если вы найдете «ctrl + перетаскивание из каждого ViewController в« Настройки »ViewController« tasky, вы также можете выбрать навигационный контроллер. U просто нужно встроить навигационный контроллер в свою раскадровку и определить идентификатор раскадровки для каждого контроллера просмотра, и все готово. Просто используйте идентификатор раскадровки для контроллера представлений, чтобы создать экземпляр, и вам хорошо идти.

ViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"]; 
[self.navigationController pushViewController:vc animated:YES]; 

Кроме назначения идентификатора раскадровки, вам не нужно беспокоиться о раскадровке, не использовать Ctrl + drag.

Я думал о еще одном элегантном решении, то есть с использованием вида контейнера. Вы можете нажать кнопку, чтобы переключаться, SettingsViewController как общий, в вашем контроллере просмотра контейнера, показывая каждый ViewController. happy Coding ..

0

Вы не можете этого сделать. Сег имеет только один источник и один пункт назначения. Вы можете программно создать свои настройки ViewController и отобразить его либо с помощью нажатия, либо с помощью текущего. То, о чем вы должны думать, это то, почему вы должны идти в настройки из стольких мест. Это может быть признаком плохой конструкции и дублирования кода. Обычно приложения имеют только одну такую ​​кнопку/действие, к которой можно получить доступ с нескольких экранов (с помощью какой-то реализации вида контейнера) или только с одного экрана.

0

Существует один способ сделать это. Создайте контроллер корневого представления и соответствующее представление, которое содержит один встроенный вид. Добавьте свой segue в этот корневой контроллер. Затем в вашем приложении вы переключаетесь на другие контроллеры представлений, используя стандартные методы дочерних контейнеров. Это в значительной степени концепция использования UINavigationControllers.

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

Но все зависит от того, чего вы пытаетесь достичь.

Смежные вопросы