2010-07-26 10 views
2

다른 것들 중에서 사용자가 원격 웹 서버에 등록, 로그인 및 로그 아웃 할 수있는 iPhone 응용 프로그램을 개발 중입니다.대리인을 사용하여 여러보기 전환

이 앱 기능에는 3 개의보기 컨트롤러가 정의되어 있습니다.

  • SignupViewController
  • LoginViewController

LogoutViewController

  • 각각은 각각의 XIB 파일을 갖는다.

    어떤 버튼을 눌렀는지에 따라보기를 전환 할 수 있기를 원합니다. 예 :

    SignupView에는 가입 버튼과 로그인 버튼이 있습니다. 가입 버튼을 누르면 LogoutView로 전환하고 로그인 버튼을 누르면 LoginView로 전환합니다.

    는 마찬가지로 LoginView는 로그인 버튼이되고 LogoutView

    에보기를 전환 그리고 finallty 것이다 누를 때 LogoutView 조치가 봤는데

    LoginView에보기를 전환 할의 로그 아웃 버튼이됩니다 이 전략을 개발할 때 취해야 할 다양한 전략을 생각해 보았지만 어떤 전략이 최선인지는 잘 모르겠습니다.

    하나의 아이디어와 구현이 가장 쉬운 방법은 xib 파일에 정의 된 세 가지보기가있는 단일보기 컨트롤러를 사용하고 컨트롤러가 전환을 처리하도록하는 것입니다. 이 접근법에 몇 가지 문제가 있습니다. xib 파일은 상당히 클 것이고 컨트롤러 논리가 매우 복잡해지면서로드 속도가 느려질 수 있습니다.

    두 번째 생각과 현재의 접근 방식은 세 가지 하위보기 중 하나를 전환하는 역할을하는 부모보기 컨트롤러를 갖는 것입니다. 이 문제는 버튼 동작을 현재 하위보기 컨트롤러의 메서드에만 할당 할 수 있다는 점에서 문제가 있습니다. 내 경우에는 스위치를 처리하기 위해 호출해야하는 메서드가 상위 컨트롤러에 있으며이 메서드는 하위 뷰에서 사용할 수 없습니다.

    부모 컨트롤러에 스위치 메서드를 실행하도록 요청할 수는 있지만 여기서는 코드에서이 작업을 수행 할 대리자를 정의하는 방법에 대해 여전히 확신이 없으므로 대리자가 여기에 완벽한 대답으로 보입니다.

    아무도 도와 드릴 수 있습니까? 대리인 전략보다 효과가 좋은 세 번째 전략이 있습니까?

  • 답변

    1

    UINavigationController를 루트로 사용하는 경우 원하는 컨트롤러를 팝업하고 누를 수 있습니다. 당신이 someOtherVC에 someVC 전환하고자 할 때

    다음
    [rootController.navigationController pushViewController: someVC animated: YES]; 
    

    , 나중에, 당신은이 작업을 수행 할 것 :

    UINavigationController *navCon = self.navigationController; 
    [navCon popViewControllerAnimated: NO]; // get rid of me 
    [navCon pushViewController: someOtherController animated: YES]; // add new controller. 
    

    참고 : 모든 코드를 입력 그래서, 당신이 뭔가를 시작할 수 브라우저 및 테스트되지 않은,하지만 당신은이 생각을 가져야한다고 생각합니다.

    위임자 나 알림 또는 다른 것들을 사용할 수 있지만 탐색 컨트롤러의 푸시/팝 기능은 이러한 종류의 뷰 스택 재배치에 매우 편리합니다. 참고 : nav 컨트롤러 모양이 마음에 들지 않으면 nav-bar를 숨길 수 있습니다! :)

    +0

    그래, 네비게이션 컨트롤러처럼 보이는 방법입니다. 제안 해 주셔서 감사합니다. – KJF