Почему мой UIMenuController не отображается в моем представлении?

Я не могу понять, почему мой UIMenuController не отображается в моем представлении. Когда я долго жму кнопку, я вижу, что все инструкции выполнены, но меню не отображается.

public class MySingleArticleView : UIView
{
    private MyArticleViewController _controller; // MyArticleViewController extends BaseViewController

    public MySingleArticleView (MyArticleViewController controller, ...)
    {
        _controller = controller;

        // ... init code
    }

    void ArticleLongPressed (UILongPressGestureRecognizer gestureRecognizer)
    {
        var menuController = UIMenuController.SharedMenuController;
        var copyMenuItem = new UIMenuItem ("copy", new Selector ("CopyRow"));
        var pasteMenuItem = new UIMenuItem ("paste", new Selector ("PasteRow"));
        var location = gestureRecognizer.LocationInView (_controller.View);
        _controller.BecomeFirstResponder ();
        menuController.MenuItems = new [] { copyMenuItem, pasteMenuItem };
        menuController.SetTargetRect (new CGRect (location.X, location.Y, 0, 0), _controller.View);
        menuController.SetMenuVisible (true, true);
    }

    [Export("CopyRow")]
    void Row (UIMenuController controller)
    {
        // do something
    }

    [Export("PasteRow")]
    void PasteRow (UIMenuController controller)
    {
        // do something
    }
}

Что я забыл?

1 ответ

Может быть потому, что вы задаете значение высоты и ширины, равное 0, когда вы устанавливаете целевой прямоугольник:

menuController.SetTargetRect (new CGRect (location.X, location.Y, 0, 0), _controller.View);

Попробуйте задать ему высоту и ширину и посмотрите, появится ли он:

menuController.SetTargetRect (new CGRect (location.X, location.Y, 100, 100), _controller.View);

Я нашел ответ сам, и, возможно, у кого-то может быть такая же проблема.

Мне нужно было поставить двоеточие ':' после имени экспортируемой функции, поэтому:

[Export("PasteRow:")] 
void PasteRow (UIMenuController controller) 
{ 

}

[Export("CopyRow:")] 
void CopyRow (UIMenuController controller) 
{ 

}

Точно так же при установке:

var copyMenuItem = new UIMenuItem ("copy", new Selector ("CopyRow:")); 
var pasteMenuItem = new UIMenuItem ("paste", new Selector ("PasteRow:"));
Другие вопросы по тегам