public static void PresentModelView(UIView view, UIModalTransitionStyle transistionStyle)
        {
            var controller = CreateDialogViewController(view);

            controller.ModalTransitionStyle = transistionStyle;

            var navigation = new UINavigationController();

            navigation.ViewControllers = new UIViewController[] { controller };

            NavigationController.PresentModalViewController(navigation, true);
        }
예제 #2
0
        public static void PresentModelView(object view, UIModalTransitionStyle transistionStyle)
        {
            var dvc = CreateDialogViewController(view, true, false);

            dvc.ModalTransitionStyle = transistionStyle;

            var navController = new NavigationController()
            {
                ViewControllers = new UIViewController[] { dvc }
            };

            NavigationController.PresentModalViewController(navController, true);
        }
예제 #3
0
 public static Task ShowModal(
     UIViewController parentViewController,
     UIView view,
     UIModalPresentationStyle presentationStyle = UIModalPresentationStyle.FormSheet,
     UIModalTransitionStyle transitionStyle     = UIModalTransitionStyle.CoverVertical,
     Action completionHandler = null,
     bool dismissOnTapOutside = true,
     bool disposeOnFinish     = false
     )
 {
     return(ShowModal(
                parentViewController,
                new UIViewController {
         View = view
     },
                presentationStyle,
                transitionStyle,
                completionHandler,
                dismissOnTapOutside,
                disposeOnFinish
                ));
 }
예제 #4
0
 public static Task ShowModal <TViewController>(
     UIViewController parentViewController,
     TViewController viewController,
     Action <TViewController, Action> dismissSubscriber,
     UIModalPresentationStyle presentationStyle = UIModalPresentationStyle.FormSheet,
     UIModalTransitionStyle transitionStyle     = UIModalTransitionStyle.CoverVertical,
     Action completionHandler = null,
     bool dismissOnTapOutside = true,
     bool disposeOnFinish     = false
     ) where TViewController : UIViewController
 {
     return(ShowModal <TViewController, object>(
                parentViewController,
                viewController,
                dismissSubscriber,
                presentationStyle,
                transitionStyle,
                completionHandler,
                (vc) => null,
                dismissOnTapOutside,
                disposeOnFinish
                ));
 }
예제 #5
0
 public static Task ShowModal(
     UIViewController parentViewController,
     UIViewController viewController,
     UIModalPresentationStyle presentationStyle = UIModalPresentationStyle.FormSheet,
     UIModalTransitionStyle transitionStyle     = UIModalTransitionStyle.CoverVertical,
     Action completionHandler = null,
     bool dismissOnTapOutside = true,
     bool disposeOnFinish     = false
     )
 {
     return(ShowModal <ModalFrameController>(
                parentViewController,
                new ModalFrameController(viewController),
                (mfc, dismissAction) => {
         mfc.DoneAction = dismissAction;
     },
                presentationStyle,
                transitionStyle,
                completionHandler,
                dismissOnTapOutside,
                disposeOnFinish
                ));
 }
예제 #6
0
 /// <summary>
 /// Creates a new instance of <see cref="UIViewControllerSectionsTransitionInfo"/>.
 /// </summary>
 /// <param name="allowDismissFromGesture">See <see cref="AllowDismissFromGesture"/>.</param>
 /// <param name="modalPresentationStyle">See <see cref="ModalPresentationStyle"/>.</param>
 /// <param name="modalTransitionStyle">See <see cref="ModalTransitionStyle"/>.</param>
 public UIViewControllerSectionsTransitionInfo(bool allowDismissFromGesture = true, UIModalPresentationStyle modalPresentationStyle = UIModalPresentationStyle.PageSheet, UIModalTransitionStyle modalTransitionStyle = UIModalTransitionStyle.CoverVertical)
 {
     AllowDismissFromGesture = allowDismissFromGesture;
     ModalPresentationStyle  = modalPresentationStyle;
     ModalTransitionStyle    = modalTransitionStyle;
 }
		public static void PresentModelView(UIView view, UIModalTransitionStyle transistionStyle)
		{			
			_PreviousController = CurrentViewController;
			_PreviousDialogViewController = CurrentDialogViewController;

			CurrentDialogViewController = CreateDialogViewController(view, true);

			_NavigationController = new UINavigationController();
			_NavigationController.ViewControllers = new UIViewController[] { CurrentDialogViewController };
		
			CurrentViewController = _NavigationController;
			
			CurrentViewController.ModalTransitionStyle = transistionStyle;

			NavigationController.PresentModalViewController(_NavigationController, true);
		}
예제 #8
0
        public static async Task <TResult> ShowModal <TViewController, TResult>(
            UIViewController parentViewController,
            TViewController viewController,
            Action <TViewController, Action> dismissSubscriber = null,
            UIModalPresentationStyle presentationStyle         = UIModalPresentationStyle.FormSheet,
            UIModalTransitionStyle transitionStyle             = UIModalTransitionStyle.CoverVertical,
            Action completionHandler = null,
            Func <TViewController, TResult> resultGetter = null,
            bool dismissOnTapOutside = true,
            bool disposeOnFinish     = false
            ) where TViewController : UIViewController
        {
            try {
                if (completionHandler == null)
                {
                    completionHandler = Tools.Lambda.NoOp;
                }

                if (dismissOnTapOutside && presentationStyle.IsIn(UIModalPresentationStyle.FullScreen, UIModalPresentationStyle.OverFullScreen))
                {
                    dismissOnTapOutside = false;
                }

                if (dismissSubscriber == null && dismissOnTapOutside == false)
                {
                    throw new ArgumentException("dismissSubscriber is null and dismissOnTapOutside is effectively false, this will result in an unclosable modal screen");
                }


                var signal = new ManualResetEventSlim();
                viewController.ModalPresentationStyle = presentationStyle;
                viewController.ModalTransitionStyle   = transitionStyle;
                Action dismissModalDialogAction = signal.Set;
                dismissSubscriber(viewController, dismissModalDialogAction);
                var currentPresentedController = parentViewController.FindPresentedViewController();
                if (currentPresentedController != null)
                {
                    parentViewController = currentPresentedController;
                }

                viewController.ProvidesPresentationContextTransitionStyle = true;
                viewController.DefinesPresentationContext = true;
                await parentViewController.PresentViewControllerAsync(viewController, true);

                completionHandler();

                var window = parentViewController.View.Window;
                UITapGestureRecognizerEx tapOutsideGesture = null;
                if (dismissOnTapOutside)
                {
                    tapOutsideGesture = new UITapGestureRecognizerEx(async(x) => {
                        if (x.State == UIGestureRecognizerState.Ended)
                        {
                            var location = x.LocationInView(null);//Passing nil gives us coordinates in the window
                            if (!viewController.View.PointInside(viewController.View.ConvertPointFromView(location, window), null))
                            {
                                //Convert tap location into the local view's coordinate system. If outside, dismiss the view.
                                signal.Set();
                            }
                        }
                    });
                    tapOutsideGesture.NumberOfTapsRequired = 1;
                    tapOutsideGesture.CancelsTouchesInView = false;
                    window.AddGestureRecognizer(tapOutsideGesture);
                }

                await Task.Run(() => signal.Wait());

                if (dismissOnTapOutside)
                {
                    window.RemoveGestureRecognizer(tapOutsideGesture);
                }

                if (!viewController.IsBeingDismissed && parentViewController.ModalViewController == viewController)
                {
                    await viewController.DismissViewControllerAsync(true);
                }
                return(resultGetter == null ? default(TResult) : resultGetter(viewController));
            } finally {
                if (disposeOnFinish)
                {
                    viewController.Dispose();
                }
            }
        }
		public static void PresentModelView(UIView view, UIModalTransitionStyle transistionStyle)
		{			
			var controller = CreateDialogViewController(view);
			
			controller.ModalTransitionStyle = transistionStyle;

			var navigation = new UINavigationController();
			navigation.ViewControllers = new UIViewController[] { controller };
			
			NavigationController.PresentModalViewController(navigation, true);
		}
		public static void PresentModelView(object view, UIModalTransitionStyle transistionStyle)
		{			
			var dvc = CreateDialogViewController(view, true, false);			
			dvc.ModalTransitionStyle = transistionStyle;
 
			var navController = new NavigationController() { ViewControllers = new UIViewController[] { dvc } };
			NavigationController.PresentModalViewController(navController, true);
		}