[英]Navigate between nested View Controllers across a TabBarController - Xamarin iOS
我在导航控制器和标签栏控制器的典型用例之外无法进行导航。 这是简化版本的图纸。 (真实版本有一个TabBarController,可导入9个NavController)
在我的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;
}
}
}
用户导航到事件详细信息视图控制器后,如果满足以下条件,则:
通过TabBar转到Home ViewController
选择一个新的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.