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(); } });
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); } }
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); } }