public static NSViewController ToViewController(this View view, bool allowNav = true) { var handler = view.GetOrCreateViewHandler(); var vc = new CometViewController { CurrentView = view, }; if (view.BuiltView is NavigationView nav && allowNav) { var navController = new NSNavigationController(); nav.PerformNavigate = (toView) => { //Since iOS doesn't allow nested navigations, pass the navigate along if (toView is NavigationView newNav) { newNav.PerformNavigate = nav.PerformNavigate; } navController.PushViewController(toView.ToViewController(false), true); }; navController.PushViewController(vc, false); return(navController); } return(vc); }
void SetViewControllerActions(CometViewController vc) { var view = vc.CurrentView; var leftAction = view?.GetEnvironment <Tuple <string, Action> >(CometExtensions.LeftActionButtonKey) ?? view?.BuiltView?.GetEnvironment <Tuple <string, Action> >(CometExtensions.LeftActionButtonKey); var rightAction = view?.GetEnvironment <Tuple <string, Action> >(CometExtensions.RightActionButtonKey) ?? view?.BuiltView?.GetEnvironment <Tuple <string, Action> >(CometExtensions.RightActionButtonKey); vc.NavigationItem.LeftBarButtonItem = leftAction == null ? null : new UIBarButtonItem(leftAction.Item1, UIBarButtonItemStyle.Plain, (s, e) => { leftAction.Item2?.Invoke(); }); vc.NavigationItem.RightBarButtonItem = rightAction == null ? null : new UIBarButtonItem(rightAction.Item1, UIBarButtonItemStyle.Plain, (s, e) => { rightAction.Item2?.Invoke(); }); }