2017-02-23 57 views
0

долгое время слушатель, первый раз вызывающий.IOS Swift Dismiss Tab Bar Controller и запустите новый

Я работаю над приложением, которое состоит из страницы входа (View Controller), а затем отклоняется, чтобы открыть контроллер панели вкладок с 4 вкладками, каждый с контроллером навигации со своими собственными представлениями.

Я хочу, чтобы пользователь нажал кнопку «Выход», которая отклоняет все представления, связанные с контроллером панели управления, отходит к контроллеру входа в систему, а затем создает новый контроллер панели вкладок. Без отклонения и создания нового контроллера панели вкладок все представления табуляции содержат старые пользовательские данные, поскольку они заполнены функциями «ViewDidLoad». Если нет другого способа очистить и запустить функции «ViewDIdLoad», не отпуская всех контроллеров представлений/вкладок.

Я открыт для других решений, так как я очень новичок в программировании IOS Swift и сам изучаю себя.

Моя структура выглядит следующим образом (обратите внимание, что приложение входит в бар контроллер Tab первым, если не текущий пользователь не найден, он пинает назад в Вход View Controller, который увольняет себя после входа в систему): Login/Tab Bar Controller relationship

+0

когда пользователь выхода из системы, то вы должны установить RootViewController programically и принять один BOOL для проверки входа пользователя или нет, так что вы можете легко управлять TabBar –

+0

@HimanshuMoradiya Спасибо за предложение. Я думаю, это то, что предложил габриэль ниже. Я просто не уверен, что это автоматически отклоняет первый контроллер представления (так что он еще не задерживается где-то), и если эта настройка нового корневого контроллера является хорошей практикой. Я собираюсь реализовать решение и отчитаться. – Xion

+0

Ваша проблема решить или нет? –

ответ

0

раскадровке взглядов немного запутанным. Я предполагаю, что приложение загружает первую панель вкладок, а затем контроллер входа в систему представлен в виде модально. Но тогда, что такое переход от входа в панель вкладок? толчок segue? Я полагаю, что он не используется, и логин, как вы говорите, просто уволен.

Чтобы уничтожить панель вкладок и загрузить новую версию раскадровки, вы не можете использовать segues. Это еще проще. Просто нужно назначить новый экземпляр панели вкладок для rootViewController окна вашего приложения.

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
appDelegate.window!.rootViewController = theNewTabBar 

И инстанцирует, что «theNewTabBar», вам нужно будет установить идентификатор в раскадровке и использовать

storyboard instantiateViewControllerWithIdentifier: 
+0

Привет, Габриэль, спасибо. Правильно, переход из Login в TabBar не используется. Снова правильно, страница входа в систему отклоняется.Мой следующий вопрос: правильно ли назначить новый rootViewController? Согласно моему названию, вы, безусловно, ответили на мой вопрос, но я слышал смешанные отзывы о том, как это сделать. Есть ли более эффективная практика для перезагрузки всех просмотров в TabBar (увольнение их отдельно кажется неэффективным)? Сценарий, который вы предоставляете, будет находиться на странице входа в «вид загружен» или есть лучший способ вызвать его в ответ на segue? – Xion

+0

Кроме того, только для разъяснений, прежде чем вносить какие-либо изменения, когда я увольняю страницу входа после создания нового rootviewcontroller. Вернется ли он в rootviewcontroller или мне понадобится дополнительный сеанс? – Xion

+0

@Xion Если вы хотите избежать установки нового roootViewController, вы можете подклассифицировать панель вкладок и добавить метод, который вводит пользовательские данные и устанавливает новые ViewControllers. То есть вы создаете экземпляры контроллеров представления для вкладок и устанавливаете массив с новыми экземплярами. Старые будут уничтожены автоматически. – Gabriel

0

Вы можете хранить флаг, чтобы проверить, является ли пользователь вошедший в систему или нет. При загрузке приложения вы должны открыть первую страницу LOGIN PAGE. НО НА ВХОДНОЙ СТРАНИЦЕ вы должны проверить флажок «Тот».

Если это правда, то страница должна непосредственно перенаправляться в TAB BAR. Если это False, чем при успешном входе в систему, вы должны установить флаг True. В log OUT вы должны POP TAbBAR и установить флаг False.

Это улучшенная структура. Для установки флага с областью приложения вы должны сохранить bool по умолчанию пользователя. Это функция для хранения флага и получения флага.

//for set Bool 
class func setUserDefaultBool (value : Bool, key : String){ 
     UserDefaults.standard.set(value, forKey: key) 
     UserDefaults.standard.synchronize() 
} 

//for get 
class func getUserDefaultBOOLForKey (key: String) -> Bool{ 
     return UserDefaults.standard.bool(forKey: key) 
} 
+0

Привет Аншул, вы упомянули, что «В лог-ауте вы должны POP TAbBAR». Должен ли TabBar быть встроенным в контроллер навигации, чтобы его всплывать? Или это будет работать, если я только сначала открою страницу входа в систему, а затем перейду в TabBar? – Xion

+0

Привет, у вас должен быть контроллер навигации, поток NC-> login-> tabbar –