You can programmatically dismiss an UIAlertView
via DismissWithClickedButtonIndex
and then call the delegate via Delegate.Clicked
.
Example of IUIAlertViewDelegate
:
public class UIAlertViewDelegate : NSObject, IUIAlertViewDelegate
{
[Export("alertViewCancel:")]
public void Canceled(UIAlertView alertView)
{
Console.WriteLine("IUIAlertViewDelegate Cancelled");
}
[Export("alertView:clickedButtonAtIndex:")]
public void Clicked(UIAlertView alertview, nint buttonIndex)
{
Console.WriteLine($"IUIAlertViewDelegate Clicked {buttonIndex}");
}
}
Usage:
var autoCancelSeconds = 5;
var alert = new UIAlertView("StackOverflow", $"Auto cancel in {autoCancelSeconds} seconds", null, null, new[] { "Stack", "Over", "Flow" })
{
Delegate = new UIAlertViewDelegate()
};
alert.Show();
await Task.Run(async () =>
{
for (int i = autoCancelSeconds - 1; i >= 0; i--)
{
await Task.Delay(1000);
InvokeOnMainThread(() =>
{
alert.Message = string.Format($"Auto cancel in {i} seconds");
});
}
InvokeOnMainThread(() =>
{
alert.DismissWithClickedButtonIndex(1, true);
alert.Delegate.Clicked(alert, 1);
});
});
Note: UIAlertView
is deprecated, you should move to using UIAlertController