Exemplo n.º 1
0
        void ActivateMore()
        {
            var displayed = new HashSet <nint>();

            for (var i = 0; i < _buttons.Count; i++)
            {
                var tag = _buttons[i].Tag;
                if (tag >= 0)
                {
                    displayed.Add(tag);
                }
            }

            var frame = _moreButton.Frame;

            var x = frame.X - _scroller.ContentOffset.X;

            var path        = _tableView.IndexPathForCell(this);
            var rowPosition = _tableView.RectForRowAtIndexPath(path);
            var sourceRect  = new RectangleF(x, rowPosition.Y, rowPosition.Width, rowPosition.Height);

            if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
            {
                var actionSheet = new MoreActionSheetController();

                for (var i = 0; i < _cell.ContextActions.Count; i++)
                {
                    if (displayed.Contains(i))
                    {
                        continue;
                    }

                    var item     = _cell.ContextActions[i];
                    var weakItem = new WeakReference <MenuItem>(item);
                    var action   = UIAlertAction.Create(item.Text, UIAlertActionStyle.Default, a =>
                    {
                        if (_scroller == null)
                        {
                            return;
                        }

                        _scroller.SetContentOffset(new PointF(0, 0), true);
                        if (weakItem.TryGetTarget(out MenuItem mi))
                        {
                            ((IMenuItemController)mi).Activate();
                        }
                    });
Exemplo n.º 2
0
        void ActivateMore()
        {
            var displayed = new HashSet <nint>();

            for (var i = 0; i < _buttons.Count; i++)
            {
                var tag = _buttons[i].Tag;
                if (tag >= 0)
                {
                    displayed.Add(tag);
                }
            }

            var frame = _moreButton.Frame;

            if (!Forms.IsiOS8OrNewer)
            {
                var container = _moreButton.Superview;
                frame = new RectangleF(container.Frame.X, 0, frame.Width, frame.Height);
            }

            var x = frame.X - _scroller.ContentOffset.X;

            var path        = _tableView.IndexPathForCell(this);
            var rowPosition = _tableView.RectForRowAtIndexPath(path);
            var sourceRect  = new RectangleF(x, rowPosition.Y, rowPosition.Width, rowPosition.Height);

            if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
            {
                var actionSheet = new MoreActionSheetController();

                for (var i = 0; i < _cell.ContextActions.Count; i++)
                {
                    if (displayed.Contains(i))
                    {
                        continue;
                    }

                    var item     = _cell.ContextActions[i];
                    var weakItem = new WeakReference <MenuItem>(item);
                    var action   = UIAlertAction.Create(item.Text, UIAlertActionStyle.Default, a =>
                    {
                        _scroller.SetContentOffset(new PointF(0, 0), true);
                        MenuItem mi;
                        if (weakItem.TryGetTarget(out mi))
                        {
                            mi.Activate();
                        }
                    });
                    actionSheet.AddAction(action);
                }

                var controller = GetController();
                if (controller == null)
                {
                    throw new InvalidOperationException("No UIViewController found to present.");
                }

                if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone)
                {
                    var cancel = UIAlertAction.Create(StringResources.Cancel, UIAlertActionStyle.Cancel, null);
                    actionSheet.AddAction(cancel);
                }
                else
                {
                    actionSheet.PopoverPresentationController.SourceView = _tableView;
                    actionSheet.PopoverPresentationController.SourceRect = sourceRect;
                }

                controller.PresentViewController(actionSheet, true, null);
            }
            else
            {
                var d = new MoreActionSheetDelegate {
                    Scroller = _scroller, Items = new List <MenuItem>()
                };

                var actionSheet = new UIActionSheet(null, d);

                for (var i = 0; i < _cell.ContextActions.Count; i++)
                {
                    if (displayed.Contains(i))
                    {
                        continue;
                    }

                    var item = _cell.ContextActions[i];
                    d.Items.Add(item);
                    actionSheet.AddButton(item.Text);
                }

                if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone)
                {
                    var index = actionSheet.AddButton(StringResources.Cancel);
                    actionSheet.CancelButtonIndex = index;
                }

                actionSheet.ShowFrom(sourceRect, _tableView, true);
            }
        }
Exemplo n.º 3
0
		void ActivateMore()
		{
			var displayed = new HashSet<nint>();
			for (var i = 0; i < _buttons.Count; i++)
			{
				var tag = _buttons[i].Tag;
				if (tag >= 0)
					displayed.Add(tag);
			}

			var frame = _moreButton.Frame;
			if (!Forms.IsiOS8OrNewer)
			{
				var container = _moreButton.Superview;
				frame = new RectangleF(container.Frame.X, 0, frame.Width, frame.Height);
			}

			var x = frame.X - _scroller.ContentOffset.X;

			var path = _tableView.IndexPathForCell(this);
			var rowPosition = _tableView.RectForRowAtIndexPath(path);
			var sourceRect = new RectangleF(x, rowPosition.Y, rowPosition.Width, rowPosition.Height);

			if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
			{
				var actionSheet = new MoreActionSheetController();

				for (var i = 0; i < _cell.ContextActions.Count; i++)
				{
					if (displayed.Contains(i))
						continue;

					var item = _cell.ContextActions[i];
					var weakItem = new WeakReference<MenuItem>(item);
					var action = UIAlertAction.Create(item.Text, UIAlertActionStyle.Default, a =>
					{
						_scroller.SetContentOffset(new PointF(0, 0), true);
						MenuItem mi;
						if (weakItem.TryGetTarget(out mi))
							mi.Activate();
					});
					actionSheet.AddAction(action);
				}

				var controller = GetController();
				if (controller == null)
					throw new InvalidOperationException("No UIViewController found to present.");

				if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone)
				{
					var cancel = UIAlertAction.Create(StringResources.Cancel, UIAlertActionStyle.Cancel, null);
					actionSheet.AddAction(cancel);
				}
				else
				{
					actionSheet.PopoverPresentationController.SourceView = _tableView;
					actionSheet.PopoverPresentationController.SourceRect = sourceRect;
				}

				controller.PresentViewController(actionSheet, true, null);
			}
			else
			{
				var d = new MoreActionSheetDelegate { Scroller = _scroller, Items = new List<MenuItem>() };

				var actionSheet = new UIActionSheet(null, d);

				for (var i = 0; i < _cell.ContextActions.Count; i++)
				{
					if (displayed.Contains(i))
						continue;

					var item = _cell.ContextActions[i];
					d.Items.Add(item);
					actionSheet.AddButton(item.Text);
				}

				if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone)
				{
					var index = actionSheet.AddButton(StringResources.Cancel);
					actionSheet.CancelButtonIndex = index;
				}

				actionSheet.ShowFrom(sourceRect, _tableView, true);
			}
		}