繁体   English   中英

跨TabBarController在嵌套的视图控制器之间导航-Xamarin iOS

[英]Navigate between nested View Controllers across a TabBarController - Xamarin iOS

我在导航控制器和标签栏控制器的典型用例之外无法进行导航。 这是简化版本的图纸。 (真实版本有一个TabBarController,可导入9个NavController)

AppNavigation

在我的Home Nav Controller中,有一个表格视图,用户可以在其中选择一行,并将其导航到特定的Event Detail View Controller。 那时,用户应该能够导航回事件TableView Controller以查看事件列表,或者使用TabBar导航到另一部分。

到目前为止,使用我的代码,我可以推送正确的详细信息视图控制器并选择标签栏的正确索引,但这仅在第一次时有效:

 public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
     {
         tableView.DeselectRow(indexPath, true);

         var eventsDetailView = new EventsDetailController(eventPosts[indexPath.Row]);
         //loop through ViewControllers array in case the user has set a custom tabbar order via the More Tab  
         foreach (UIViewController viewC in tbController.ViewControllers)
         {
             UINavigationController navController = viewC as UINavigationController;

             if (navController.TabBarItem.Tag.Equals(9))
             {
                 navController.PushViewController(eventsDetailView, false);       
                 tbController.SelectedIndex = 9;
             }                  
         }
     }

用户导航到事件详细信息视图控制器后,如果满足以下条件,则:

  1. 通过TabBar转到Home ViewController

  2. 选择一个新的TableRow导航到其他“事件详细信息视图”控制器...然后将显示相同的先前事件详细信息视图。 用户在Home View Controller中选择哪一行都没有关系。 初始详细视图控制器将始终与要呈现的控制器相同。

向我指出正确方向的任何帮助将不胜感激!

解:

据我了解,您想要的是:

HomePageController > EventDetailPage > EvevtTableViewControll

因此,在第一步中,您可以在HomePageController推送到EventDetailPage

this.NavigationController.PushViewController(new HomeDetailUIViewController(), true);

然后,在EventDetailPage ,您可以自定义后退按钮,例如:

   UIBarButtonItem backBtn = new UIBarButtonItem();
   backBtn.Title = "back";
   backBtn.Style = UIBarButtonItemStyle.Plain;
   this.NavigationItem.LeftBarButtonItem = backBtn;

   backBtn.Clicked += (sender, e) =>
   {
       // 1 here is an example, it should be the index of your EvevtTableViewControll
       NavigationController.TabBarController.SelectedIndex = 1;
       NavigationController.PopToRootViewController(true);
   };

设置NavigationController.TabBarController.SelectedIndex=1首先确保EvevtTableViewControll后,您会显示从后EvevtDetailViewControll ,那么你的PopToRootViewController备份到EvevtTableViewControll

尝试一下,让我知道您是否有任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM