iOS селектор в Xamarin. iOS - PullRequest
       30

iOS селектор в Xamarin. iOS

2 голосов
/ 24 апреля 2020

Я пытаюсь создать UIAccessibilityCustomAction в Xamarin. iOS. Этот метод требует name, target, selector в качестве аргументов (как вы можете видеть здесь ). Проблема в аргументе selector.

В Xcode (используя Swift) я могу легко реализовать его так:

let up = UIAccessibilityCustomAction(name: "Increment", target: self, selector: #selector(increment))


@objc private func increment() -> Bool{
    //selector implementation
}

В Xamarin (используя C#) я пробовал это :

UIAccessibilityCustomAction up = new UIAccessibilityCustomAction(name: "Increment", target: iospage, selector: new Selector("Increment"));

И, как говорится, Selector может принимать как String, так и IntPtr в качестве аргумента. Поскольку я понятия не имею, что такое IntPtr и как его использовать, я попытался использовать параметр String, как вы можете видеть выше, и попытался реализовать селектор, как это, следуя этому ответу .

[Export("Increment")]
    private void Increment()
    {
        //selector implementation
    }

Проблема в том, что кажется, что этот метод никогда не вызывался (я пытался заставить его что-то регистрировать, когда вызывается UIAccessibilityCustomAction, но журнал не отображается), возможно, потому, что это неправильный путь реализовать его.

Есть идеи?

Спасибо

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

UIAccessibilityCustomAction имеет другой экземплярный метод, в который вы можете передать пользовательское действие.

 UIAccessibilityCustomAction c = new UIAccessibilityCustomAction("Increment", 
        (UIAccessibilityCustomAction customAction) =>
        {

               //selector implementation
        });
1 голос
/ 24 апреля 2020

Благодаря совету @Cole Xia - MSFT, я нашел еще один экземплярный метод, который, кажется, легче обрабатывать, используя только name, actionHandler, поэтому без target и selector. actionHandler проще в использовании, потому что это только функция, для которой требуется тип возврата bool.

Моя реализация:

UIAccessibilityCustomAction up = new UIAccessibilityCustomAction("Increment", actionHandler: Increment);

private bool Increment(UIAccessibilityCustomAction customAction)
{
    //implementation of the handler
}
...