1

UINavigationBar를 구현하는 UITabBarController를 만들려고합니다. 몇 분만에 Xcode에서 수행 할 작업입니다. 그러나 MVVMCross를 MonoTouch로 사용하는 데 어려움을 겪고 있습니다. 코드의 일부는 다음과 같습니다 - 첫번째 VC (사용자가 용어를 & 조건, 그래서 한 번 인정을 받아이가, 다시로 이동하는 옵션이 없습니다되고, 따라서 진정한 플래그)에서MVVMCross MonoTouch UITabBarController가 탐색 모음에 액세스 할 수 없습니다.

-

this.RequestNavigate<TabHostViewModel>(true); 

내 한 tabBar은 잘 작동하는, 그래서 같이 설정 -

ViewControllers = new UIViewController[] 
{ 
    CreateTabFor("Home", "", ViewModel.homeViewModel), 
    CreateTabFor("History", "", ViewModel.journeyHistoryViewModel), 
    CreateTabFor("Contacts", "", ViewModel.contactsViewModel), 
    CreateTabFor("About", "", ViewModel.aboutViewModel), 
}; 

을 ... 등.

내가있는 viewDidLoad에과 같이 (이 경우 HomeView) 첫보기를 설정하려고 - 그러나

this.NavigationController.NavigationBar.TintColor = myNavBarColour; 

를, 그있는 navigationController 내가 TabBar의를 설정할 때 난 내 자신을 작성하지 않는 한, 정의에 보인다 - 내가 탐색 모음으로 좋아하지만, 문제는 내가 두 탐색 모음, 아니 제목 상단에 하나, 그리고 난 그냥 바로 아래 만든 새가 무엇이든 내가 할 수있는 지금

UIViewController HomeViewController = CreateTabFor("Home", "", ViewModel.homeViewModel); 
UINavigationController HomeNavController = new UINavigationController(HomeViewController); 

ViewControllers = new UIViewController[] 
{ 
    HomeNavController, 
    CreateTabFor("History", "", ViewModel.journeyHistoryViewModel), 
    CreateTabFor("Contacts", "", ViewModel.contactsViewModel), 
    CreateTabFor("About", "", ViewModel.aboutViewModel), 
}; 

.

의견이있는 사람은 누구입니까?

감사합니다.

+0

설정이 명확하지 않습니다. 그러나 홈 레벨에 탐색 모음이 없어야한다고 생각합니다. 대신 각 탭에 개별 탐색 모음이 있어야합니다. 이것이 회의 샘플이하는 것입니다. - http://slodge.blogspot.co.uk/2012/03/update-on-mvvmcross-sqlbits-conference.html 및 https://github.com/slodge/MvvmCross/tree/ 마스터/샘플 % 20- % 20CirriousConference – Stuart

+0

감사합니다 스튜어트 - 지금 코드를 진행하고 있습니다. 안타깝게도 앱이 실행되지 않고 UpdateView의 base.ViewDidLoad()에서 충돌이 발생합니다. – SomaMan

+0

음 ... MonoTouch의 어떤 버전 ... 앱 스토어에서도 실행되었습니다 ... argh – Stuart

답변

0

설정이 명확하지 않습니다.

이 코드는 하나의 내부 호스팅

  • :

    private UIViewController CreateTabFor(string title, string imageName, IMvxViewModel viewModel) 
        { 
         var controller = new UINavigationController(); 
         controller.NavigationBar.TintColor = UIColor.Black; 
         var screen = this.CreateViewControllerFor(viewModel) as UIViewController; 
         SetTitleAndTabBarItem(screen, title, imageName); 
         controller.PushViewController(screen, false); 
         return controller; 
        } 
    
        private void SetTitleAndTabBarItem(UIViewController screen, string title, string imageName) 
        { 
         screen.Title = ViewModel.TextSource.GetText(title); 
         screen.TabBarItem = new UITabBarItem(title, UIImage.FromBundle("Images/Tabs/" + imageName + ".png"), 
                  _createdSoFarCount); 
         _createdSoFarCount++; 
        } 
    
        public override void ViewDidLoad() 
        { 
         base.ViewDidLoad(); 
    
         if (ViewModel == null) 
         { 
          _needViewDidLoadCall = true; 
          return; 
         } 
    
         _needViewDidLoadCall = false; 
    
         var viewControllers = new UIViewController[] 
               { 
               CreateTabFor("Welcome", "home", ViewModel.Welcome), 
               CreateTabFor("Sessions", "sessions", ViewModel.Sessions), 
               CreateTabFor("Favorites", "favorites", ViewModel.Favorites), 
               CreateTabFor("Tweets", "twitter", ViewModel.Twitter), 
               }; 
         ViewControllers = viewControllers; 
         CustomizableViewControllers = new UIViewController[] { }; 
         SelectedViewController = ViewControllers[0]; 
        } 
    

    탐색은 다음 발표자 로직 내부에 차단한다 (구성

    public bool ShowView(IMvxTouchView view) 
        { 
         if (TryShowViewInCurrentTab(view)) 
          return true; 
    
         return false; 
        } 
    
        private bool TryShowViewInCurrentTab(IMvxTouchView view) 
        { 
         var navigationController = (UINavigationController)this.SelectedViewController; 
         navigationController.PushViewController((UIViewController)view, true); 
         return true; 
        } 
    

    - AppDelegate에)에 ConferencePresenter는에 ShowView 논리를 연기

    이 논리는 약간 복잡하지만이 탐색 및 발표자 디자인의 목적은 응용 프로그램에 맞게 프레젠테이션을 사용자 지정할 수 있도록하기위한 것입니다. 런타임시 동적으로 변경할 수도 있습니다. 예를 들어 iPhone 대신 iPad에서 다른 프리젠 테이션 로직을 사용하도록 선택할 수 있습니다.

  • 관련 문제