public override void ItemSelected(UITabBar tabbar, UITabBarItem item) { var targetViewController = ViewControllers.Single(vc => vc.TabBarItem == item); if (targetViewController is UINavigationController navigationController && navigationController.TopViewController is ReportsViewController) { ViewModel.StartReportsStopwatch(); } if (targetViewController == SelectedViewController && tryGetScrollableController() is IScrollableToTop scrollable) { scrollable.ScrollToTop(); } UIViewController tryGetScrollableController() { if (targetViewController is IScrollableToTop) { return(targetViewController); } if (targetViewController is UINavigationController nav) { return(nav.TopViewController); } return(null); } }
public virtual void ShowTabView(UIViewController viewController, string tabTitle, string tabIconName, string tabAccessibilityIdentifier = null) { if (!string.IsNullOrEmpty(tabAccessibilityIdentifier)) { viewController.View.AccessibilityIdentifier = tabAccessibilityIdentifier; } // setup Tab SetTitleAndTabBarItem(viewController, tabTitle, tabIconName); // add Tab var currentTabs = new List <UIViewController>(); if (ViewControllers != null) { currentTabs = ViewControllers.ToList(); } if (viewController as UINavigationController != null) { (viewController as UINavigationController).NavigationBar.Translucent = false; } currentTabs.Add(viewController); // update current Tabs ViewControllers = currentTabs.ToArray(); }
public void MoveToViewControllerAtIndex(uint index, bool animated = true) { if (!(IsViewLoaded && View.Window != null && CurrentIndex != index)) { PreCurrentIndex = index; return; } if (animated && PagerBehaviour.SkipIntermediateViewControllers == true && Math.Abs(CurrentIndex - index) > 1) { // create a copy of the view controller array so the // orignal view controller array indices don't get modified var tmpViewControllers = ViewControllers.ToArray(); var currentChildVC = ViewControllers[CurrentIndex]; var fromIndex = CurrentIndex < index ? index - 1 : index + 1; var fromChildVC = ViewControllers[fromIndex]; tmpViewControllers[CurrentIndex] = fromChildVC; tmpViewControllers[fromIndex] = currentChildVC; pagerTabStripChildViewControllersForScrolling = tmpViewControllers; ContainerView.SetContentOffset(new CGPoint(PageOffsetForChildIndex(index: fromIndex), 0), animated: false); (NavigationController?.View ?? View).UserInteractionEnabled = false; ContainerView.SetContentOffset(new CGPoint(PageOffsetForChildIndex(index: index), 0), animated: true); } else { (NavigationController?.View ?? View).UserInteractionEnabled = false; ContainerView.SetContentOffset(new CGPoint(PageOffsetForChildIndex(index: index), 0), animated: animated); } }
public override UIViewController PopViewController(bool animated) { var c = ViewControllers.LastOrDefault(); Router.BackAsync(); return(c); }
public virtual void ShowTabView(UIViewController viewController, bool wrapInNavigationController, string tabTitle, string tabIconName) { // setup Tab SetTitleAndTabBarItem(viewController, tabTitle, tabIconName); // add Tab var currentTabs = new List <UIViewController>(); if (ViewControllers != null) { currentTabs = ViewControllers.ToList(); } if (wrapInNavigationController) { var navController = new UINavigationController(); navController.NavigationBar.Translucent = false; navController.PushViewController(viewController, true); currentTabs.Add(navController); } else { currentTabs.Add(viewController); } // update current Tabs ViewControllers = currentTabs.ToArray(); }
public override void ItemSelected(UITabBar tabbar, UITabBarItem item) { var targetViewController = ViewControllers.Single(vc => vc.TabBarItem == item); if (targetViewController == SelectedViewController && tryGetScrollableController() is IScrollableToTop scrollable) { scrollable.ScrollToTop(); } else if (targetViewController is ReactiveNavigationController navigationController) { if (navigationController.TopViewController is IReactiveViewController reactiveViewController) { reactiveViewController.DismissFromNavigationController(); } } UIViewController tryGetScrollableController() { if (targetViewController is IScrollableToTop) { return(targetViewController); } if (targetViewController is UINavigationController nav) { return(nav.TopViewController); } return(null); } }
public override sealed void ViewDidLoad() { if (!_viewConstructed) { return; } base.ViewDidLoad(); // Create and set tabs. var viewControllers = new[] { CreateTabViewController <DetailsTabView>("Details", "DetailsTabBarIcon", 0), CreateTabViewController <ConversationsTabView>("Conversations", "ConversationsTabBarIcon", 1), CreateTabViewController <FilesTabView>("Files", "FilesTabBarIcon", 2), CreateTabViewController <TasksTabView>("Tasks", "TasksTabBarIcon", 3) }; ViewControllers = viewControllers; SelectedViewController = ViewControllers.First(); // "Bind" the network activity indicator to the loading property. UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true; ViewModel.WeakSubscribe((sender, e) => { if (e.PropertyName != nameof(ViewModel.IsLoading)) { return; } UIApplication.SharedApplication.NetworkActivityIndicatorVisible = ViewModel.IsLoading; }); }
protected override void Dispose(bool disposing) { var formsItems = (Element as NavigationPageEx).CurrentPage .ToolbarItems .Where(x => x.Order != ToolbarItemOrder.Secondary) .OrderByDescending(x => x.Priority); foreach (var item in formsItems) { var itemEx = item as ToolbarItemEx; if (itemEx == null) { continue; } itemEx.PropertyChanged -= ItemEx_PropertyChanged; } var ctrl = ViewControllers.Last(); foreach (var item in ctrl.NavigationItem.LeftBarButtonItems) { item.Dispose(); } base.Dispose(disposing); }
void RemovePage(Page page) { if (page == null) { throw new ArgumentNullException("page"); } if (page == Current) { throw new NotSupportedException(); // should never happen as NavPage protecs against this } var target = Platform.GetRenderer(page).ViewController.ParentViewController; // So the ViewControllers property is not very property like on iOS. Assigning to it doesn't cause it to be // immediately reflected into the property. The change will not be reflected until there has been sufficient time // to process it (it ends up on the event queue). So to resolve this issue we keep our own stack until we // know iOS has processed it, and make sure any updates use that. // In the future we may want to make RemovePageAsync and deprecate RemovePage to handle cases where Push/Pop is called // during a remove cycle. if (_removeControllers == null) { _removeControllers = ViewControllers.Remove(target); ViewControllers = _removeControllers; Device.BeginInvokeOnMainThread(() => { _removeControllers = null; }); } else { _removeControllers = _removeControllers.Remove(target); ViewControllers = _removeControllers; } }
protected virtual void OnRemoveRequested(NavigationRequestedEventArgs e) { var page = e.Page; var renderer = Platform.GetRenderer(page); var viewController = renderer?.ViewController; if (viewController == null && _trackers.ContainsKey(page)) { viewController = _trackers[page].ViewController; } if (viewController != null) { if (viewController == TopViewController) { e.Animated = false; OnPopRequested(e); } if (ViewControllers.Contains(viewController)) { ViewControllers = ViewControllers.Remove(viewController); } DisposePage(page); } }
public virtual void ReloadPagerTabStripView() { if (IsViewLoaded) { foreach (UIViewController childController in ViewControllers) { if (childController.ParentViewController != null) { childController.BeginAppearanceTransition(false, false); childController.WillMoveToParentViewController(null); childController.View.RemoveFromSuperview(); childController.RemoveFromParentViewController(); childController.EndAppearanceTransition(); } } ReloadViewControllers(); ContainerView.ContentSize = new CGSize(ContainerView.Bounds.Width * new nfloat(ViewControllers.Count()), ContainerView.ContentSize.Height); if (CurrentIndex >= ViewControllers.Count()) { CurrentIndex = (uint)ViewControllers.Count() - 1; } ContainerView.ContentOffset = new CGPoint(PageOffsetForChildIndex(CurrentIndex), 0); UpdateContent(); } }
/// <summary> /// 返回到最初的控制器 /// </summary> public void PopToRootViewController() { for (int i = ViewControllers.Count - 1; i > 0; i--) { ViewControllers[i].DismissViewController(); ViewControllers.RemoveAt(i); } }
/// <summary> /// 跳转到新的控制器 /// </summary> /// <param name="viewController"></param> /// <param name="animated"></param> public virtual void PushViewController(UIViewController viewController, bool animated = false) { ViewControllers.Add(viewController); viewController.sortingOrder = LayerOrder + 1; UIRoot.Instance.NormalRoot.AddChild(viewController); }
//TODO: this was deprecated in iOS8.0 and is not called in 9.0+ public override void DidRotate(UIInterfaceOrientation fromInterfaceOrientation) { base.DidRotate(fromInterfaceOrientation); View.SetNeedsLayout(); var parentingViewController = (ParentingViewController)ViewControllers.Last(); parentingViewController?.UpdateLeftBarButtonItem(); }
public NavigationRenderer() : base(typeof(FormsNavigationBar), null) { MessagingCenter.Subscribe<IVisualElementRenderer>(this, UpdateToolbarButtons, sender => { if (!ViewControllers.Any()) return; var parentingViewController = (ParentingViewController)ViewControllers.Last(); parentingViewController?.UpdateLeftBarButtonItem(); }); }
public override void ItemSelected(UITabBar tabbar, UITabBarItem item) { var targetViewController = ViewControllers.Single(vc => vc.TabBarItem == item); if (targetViewController is UINavigationController navigationController && navigationController.TopViewController is ReportsViewController) { ViewModel.StartReportsStopwatch(); } }
public override UIViewController PopViewController(bool animated) { if (ViewControllers.Length <= 2) { var vc = ViewControllers.LastOrDefault(); DismissViewController(animated, () => base.PopViewController(false)); return(vc); } return(base.PopViewController(animated)); }
/// <summary> /// 销毁 Push 出来的控制器 /// </summary> /// <param name="animated"></param> public virtual UIViewController PopViewController(bool animated = false) { GObject[] gObjects = UIRoot.Instance.NormalRoot.GetChildren(); int index = gObjects.Length - 1; UIViewController pushViewController = (UIViewController)UIRoot.Instance.NormalRoot.GetChildAt(index); pushViewController.DismissViewController(animated); ViewControllers.Remove(pushViewController); return(pushViewController); }
public UIViewController GetNextViewController(UIPageViewController pageViewController, UIViewController referenceViewController) { var index = ViewControllers.IndexOf(referenceViewController) + 1; if (index == ViewControllers.Count) { return(null); } return(ViewControllers[index]); }
void handleUpdatedSelected(object sender, EventArgs e) { refreshForUpdatedSelected(); var current = ViewControllers.FirstOrDefault(); if (current != null) { Analytics.TrackPageViewStart(current, childPageName(current), WuClient.Shared.Selected); } }
public UIViewController GetPreviousViewController(UIPageViewController pageViewController, UIViewController referenceViewController) { var index = ViewControllers.IndexOf(referenceViewController) - 1; if (index < 0) { return(null); } return(ViewControllers[index]); }
public nfloat OffsetForChild(UIViewController viewController) { var index = ViewControllers.IndexOf(viewController); if (index > -1) { throw new ViewControllerNotContainedInPagerTabStrip(); } return(OffsetForChild(index)); }
public override UIViewController PopViewController(bool animated) { var viewControllerToPop = ViewControllers.Last(); if (viewControllerToPop is IReactiveViewController reactiveViewController) { reactiveViewController.DismissFromNavigationController(); } return(base.PopViewController(animated)); }
public override UIViewController PopViewController(bool animated) { var viewControllerToPop = ViewControllers.Last(); if (viewControllerToPop is IReactiveViewController reactiveViewController) { reactiveViewController.ViewcontrollerWasPopped(); } return(base.PopViewController(animated)); }
void InsertPageBefore(Page page, Page before) { if (before == null) throw new ArgumentNullException("before"); if (page == null) throw new ArgumentNullException("page"); var pageContainer = CreateViewControllerForPage(page); var target = Platform.GetRenderer(before).ViewController.ParentViewController; ViewControllers = ViewControllers.Insert(ViewControllers.IndexOf(target), pageContainer); }
public override UIViewController[] PopToRootViewController(bool animated) { UIViewController[] vcs = null; if (VisibleViewController != ViewControllers.FirstOrDefault()) { regularPop = TopViewController != ViewControllers.FirstOrDefault(); vcs = base.PopToRootViewController(animated); } return(vcs); }
public override void ViewDidLoad() { base.ViewDidLoad(); if (!ViewControllers.Any()) { return; } var parentingViewController = ViewControllers.Last(); UpdateLeftBarButton(parentingViewController); }
public NavigationRenderer() { MessagingCenter.Subscribe <IVisualElementRenderer>(this, UpdateToolbarButtons, sender => { if (!ViewControllers.Any()) { return; } var parentingViewController = (ParentingViewController)ViewControllers.Last(); UpdateLeftBarButtonItem(parentingViewController); }); }
void DisposePage(IPage page, bool calledFromDispose = false) { if (_trackers.TryGetValue(page, out var tracker)) { if (!calledFromDispose && tracker.ViewController != null && ViewControllers.Contains(tracker.ViewController)) { ViewControllers = ViewControllers.Remove(_trackers[page].ViewController); } _trackers.Remove(page); } }
public nfloat?[] CalculateWidths() { var flowLayout = ButtonBarView.CollectionViewLayout as UICollectionViewFlowLayout; var numberOfCells = ViewControllers.Count(); List <nfloat> minimumCellWidths = new List <nfloat>(); nfloat collectionViewContentWidth = 0; foreach (var viewController in ViewControllers) { var childController = viewController as IIndicatorInfoProvider; var indicatorInfo = childController.IndicatorInfoForPagerTabStrip(this); if (ButtonBarItemSpec.NibName == null) { nfloat width = width = ButtonBarItemSpec.WidthCallback(indicatorInfo); minimumCellWidths.Add(width); collectionViewContentWidth += width; } else { nfloat width = width = ButtonBarItemSpec.WidthCallback(indicatorInfo); minimumCellWidths.Add(width); collectionViewContentWidth += width; } } var cellSpacingTotal = new nfloat(numberOfCells - 1) * flowLayout.MinimumLineSpacing; collectionViewContentWidth += cellSpacingTotal; nfloat collectionViewAvailableVisibleWidth = ButtonBarView.Frame.Size.Width - flowLayout.SectionInset.Left - flowLayout.SectionInset.Right; if (!Settings.Style.ButtonBarItemsShouldFillAvailiableWidth || collectionViewAvailableVisibleWidth < collectionViewContentWidth) { return(minimumCellWidths.Select(i => (nfloat?)i).ToList().ToArray()); } else { var stretchedCellWidthIfAllEqual = (collectionViewAvailableVisibleWidth - cellSpacingTotal) / new nfloat(numberOfCells); var generalMinimumCellWidth = CalculateStretchedCellWidths(minimumCellWidths.ToArray(), suggestedStretchedCellWidth: stretchedCellWidthIfAllEqual, previousNumberOfLargeCells: 0); List <nfloat> stretchedCellWidths = new List <nfloat>(); foreach (nfloat minimumCellWidthValue in minimumCellWidths) { var cellWidth = (minimumCellWidthValue > generalMinimumCellWidth) ? minimumCellWidthValue : generalMinimumCellWidth; stretchedCellWidths.Add(cellWidth); } return(stretchedCellWidths.Select(i => (nfloat?)i).ToList().ToArray()); } }