2013-04-10 5 views
1

후에 사라 것은 내 응용 프로그램의 설정입니다 :내 탭 바 컨트롤러는 푸시 SEGUE 여기

탐색 -

-loginVC -if 로그인, 유효

tab bar controller with 3 tabs: 
     -in the first tab, is a profile display which modal pushes to a profile editor(not 
     issue here) 
     -second tab is a searchVC that pushes to a tableVC that shows results. This is 
     where the tab bar disappears 
     -The third view is just a VC for updating the database this is linked to. 

이 간 SEGUE 밀어 말 그대로 스토리 보드에서 어떻게 작동하는지, 그리고 searchVC에서 tableVC까지의 segue가 push segue인지 확인했습니다.

어떻게이 두 번째보기에서 탭 표시 줄 컨트롤러가 사라지지 않게 할 수 있습니까?

답변

0

언급하지 않은 다른 내비게이션 컨트롤러가 없다면 초기 컨트롤러 인 내비게이션 컨트롤러에서 푸시해야합니다. 따라서, 그것으로부터 밀어 내면 네비게이션 컨트롤러의 뷰 컨트롤러에있는 tab bar 컨트롤러 위에 tableVC가 놓입니다.

나는 당신이 탭 바 컨트롤러를 윈도우의 루트보기 컨트롤러로 만들 것을 제안한다. 첫 번째 탭 (viewDidAppear 메서드에서)의 컨트롤러에서 modally로 표시된 loginVC가 있으므로 앱이 시작될 때 맨 처음 표시됩니다. 두 번째 탭에는 탐색 컨트롤러의 루트보기 컨트롤러로 searchVC가있는 루트 컨트롤러로 탐색 컨트롤러가 있어야합니다.

2

구조는 순간

loginViewController -->modal segue--> tabBarController 
             | 
             | 
             |-->NavController->Item1ViewController 
             | 
             |-->NavController->Item2ViewController 
             | 
             |-->NavController->Item3ViewController 

을해야한다, 두 번째 탭 항목에서 '푸시'는 항목이 최초의 ViewController에서에 밀어 비켜 전체 탭 표시 줄 컨트롤러를 푸시합니다. 당신이 (일관성) 당신의 loginViewController에 탐색 모음을 원하는 경우에

, 그것의 자신있는 navigationController에서 그것을 포함하지만 거기에서 밀어하지 않는 당신을 확인하십시오 [self presentViewController:tabBarViewController animated:yes completion:nil]

modal SEGUE 또는 선물을 탭 표시 줄의 각을 항목의 탐색 컨트롤러는 선택 사항입니다 (탐색중인 탐색 항목에 따라 분명히 항목 2를 원합니다).하지만 일관성을 위해 각 항목마다 하나씩 지정할 수 있습니다. 상단에있는 응용 프로그램의 나머지 부분은 '모달'을 선보였다 인의 - - 모달 SEGUE의 오용이며,

갱신
@rdelmar는 루트 뷰 컨트롤러로 로그인 화면을 사용하는이 방법은 제안 대신 첫 번째 탭 항목에 로그인 화면을 모달로 표시하는 것이 좋습니다. 나는 그 점을 이해하고 좀 더 생각할 것이지만 마찬가지로 대안을 조금 불편하게 느낀다 ... 탭 항목은 tabVC에서 같은 가중치를 공유해야한다 - 그래서 첫 번째 항목을 전체 앱이 의존하는 모달 로그인 컨트롤러로 만든다. 좋은 프로그램 흐름처럼 느껴지지 않습니다. 앱에 사용자가 로그인해야한다는 요구가있는 경우 로그인 상태가 좋지 않은 것으로 보입니다.

여기에 대답에 대한 자세한 설명이 나와 있습니다. (How to handle UINavigationControllers and UITabBarControllers iOS 6.1). 또한 앱의 어느 곳에서나 로그 아웃 버튼을 제공하면 첫 번째 로그인 화면으로 되돌아 갈 수 있습니다 - 실질적으로 - 전체 로그인 된 앱 스택 표시 - 제대로 작동합니다.

다른 해결책 - @ rdelmar 's와 차임 - 첫 번째 viewController 에서 모달로 로그인 화면을 표시하는 것이고, 이것이 인 경우입니다. 이것은 로그인 후 navController 내장 된 viewController 첫 번째 화면으로 내 앞의 대답에서 일한 수 있습니다.그러나 긴장을 푸는 것이 너무 깔끔한 것은 아닙니다.

결국 나는 이것이 흐름 논리가 견고하기 만하면 너무 오랫동안 매달려서는 안되는 스타일일지도 모른다고 생각합니다.

+0

이것은 내가 지금 염두에 두었던 것입니다. 내가 한 일은 원래 네이게이션 막대를 숨기고 각각의 네비게이션 막대를 만들었습니다. 각보기 사이에 데이터를 전달할 때마다 데이터를 가져 와서 해당보기로 전달하는 자체 탐색 컨트롤러를 만들었습니다. – Jargen89

+0

이것이 모달 뷰 컨트롤러를 오용한다고 생각합니다. 작동하지 않지만 메인 인터페이스를 모달 컨트롤러로 사용하는 것은 모달 컨트롤러의 의도 된 사용을 위반합니다. Apple의 문서에서 "보기 컨트롤러를 제공하는 기능은 현재 워크 플로를 중단하고 새로운보기 집합을 표시하는 데 사용할 수있는 도구입니다. 일반적으로 응용 프로그램은보기 컨트롤러를 중요한 정보를 얻기 위해 일시적인 중단으로 제공합니다 그러나 특정 시점에 제공된보기 컨트롤러를 사용하여 앱의 대체 인터페이스를 구현할 수도 있습니다. " – rdelmar

+0

탭 표시 줄 컨트롤러는 대체 인터페이스가 아니거나 일시적인 중단이 아닌 기본 인터페이스입니다. 운영상의 관점에서 볼 때이 문제는 아무 문제가 없습니다 (로그인 컨트롤러가 살아있는 것만 빼고 전체 앱을 생각한 것). – rdelmar

관련 문제