我正试图在Xamarin.iOS中创建一个UIAccessibilityCustomAction
。此方法需要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时,我试图让它记录一些东西,但没有显示日志(,可能是因为这是错误的实现方式
知道吗?
感谢
UIAccessibilityCustomAction有另一个实例化方法,您可以将自定义操作传递给它。
UIAccessibilityCustomAction c = new UIAccessibilityCustomAction("Increment",
(UIAccessibilityCustomAction customAction) =>
{
//selector implementation
});
多亏了@Cole Xia-MFT的提示,我发现了另一个似乎更容易处理的实例化方法,只使用name, actionHandler
,因此没有target
和selector
。actionHandler
更容易使用,因为它只是一个需要布尔返回类型的函数。
我的实现:
UIAccessibilityCustomAction up = new UIAccessibilityCustomAction("Increment", actionHandler: Increment);
private bool Increment(UIAccessibilityCustomAction customAction)
{
//implementation of the handler
}