Хотя предложение Хуссейна работает в действительно базовой обстановке, оно может помешать, когда у вас есть другие виды под предупреждением с прикрепленными распознавателями жестов. Что я обычно делаю в подобных ситуациях (хорошо работает, например, при закрытии клавиатуры), это добавление полноэкранной невидимой кнопки в мое представление контента.
public readonly UIButton CloseButton;
public MyView()
{
CloseButton = new UIButton(UIButtonType.System);
CloseButton.Alpha = 0; //or CloseButton.Hidden = true;
AddSubview(CloseButton);
}
Вы можете добавить обработчик уже в ViewDidAppear, поскольку с невидимыми представлениями нельзя взаимодействовать.
UIAlertController actionSheetAlert;
public override void ViewDidAppear(bool animated)
{
contentView.CloseButton.TouchUpInside += CloseAlert;
}
void CloseAlert(object sender, EventArgs e)
{
//Notice the missing null check because the alert should never be null here. If it is you have a problem in your code and you'll find it easily.
actionSheetAlert.DismissViewController(true, () => { });
//Hide the button here.
}
А когда вы открываете диалоговое окно с предупреждением, вы просто делаете кнопку видимой. Если вы хотите проявить фантазию и прояснить для пользователя, что нажатие за пределами диалогового окна закрывает ее, тогда вы можете сделать кнопку черной и установить альфа на 30% при открытии диалогового окна.
void OpenDialog() {
//Create dialog, add actions etc.
UIView.Animate(0.3, () => { CloseButton.Alpha = 0.3f});
}
И если вы удерживаете кнопку отмены в предупреждении, не забудьте также скрыть там кнопку закрытия с Hidden = true или Alpha = 0.