UIAlertViewController не предназначен для создания подклассов.
В выдержке из документации написано:
Вы все еще можете получить желаемый пользовательский интерфейс, используя UIViewController
с прозрачностью в представлении и подпредставлением с желаемым макетом.
Вам также необходимо установить эти два свойства: ModalTransitionStyle
и ModalPresentationStyle
на UIModalTransitionStyle.CrossDissolve и UIModalPresentationStyle.OverCurrentContext соответственно, если вы хотите свой пользовательский UIAlertController соответственноведет себя так же, как UIAlertController
Обновление:
Это то, что я имел в виду, что вы могли бы сделать:
В выпадении Main.Storyboard UIViewController и обновите дизайн по своему желанию.Следуя изображению, которое вы разместили выше, я создал пользовательский интерфейс, как показано ниже:
Это изображение, 2 UILabels для Заголовок и Сообщение и 3 кнопки для 3 различных действий (По умолчанию, Уничтожить, Отмена).Все эти элементы управления находятся внутри UIView с белым фоном.Для примера, который я назвал, это ContentView
Добавление кнопки 3 в пользовательском интерфейсе, кажется, самый простой способ работать с этим, а затем скрыть / показать их, когда вы собираетесь представить свое предупреждение,Вы также можете создавать кнопки на лету, основываясь на действиях, которые вы хотите показать.Это зависит от вас.
Создайте класс ViewController, я назвал его NiceAlertController и назначьте его ViewController в раскадровке.Кроме того, убедитесь, что вы создали обратные свойства (Outlets) для всех UIControls (Label, Button, Image и т. Д.), Чтобы вы могли получить к ним доступ из класса ViewController.
Здесь дополнительная информация окак работать с iOS Storyboard на конструкторе
Теперь в вашем классе вам нужно будет добавить код, чтобы он работал.
В вашем классе, чтобы сделать представление прозрачным, вам нужно будет добавитьэто к вашему методу ViewDidLoad:
public override void ViewDidLoad()
{
base.ViewDidLoad();
this.View.BackgroundColor = UIColor.Clear.ColorWithAlpha(0.2f);
this.View.Opaque = false;
}
Кроме того, мы могли бы имитировать способ создания UIAlertControllers и создать наш метод, подобный этому:
public static NiceAlertController Create(string title, string message, UIImage image = null)
{
//New instance of your ViewController UI
var storyboard = UIStoryboard.FromName("Main", NSBundle.MainBundle);
var alertController = storyboard.InstantiateViewController(nameof(NiceAlertController)) as NiceAlertController;
//Using the same transition and presentation style as the UIAlertViewController
alertController.ModalTransitionStyle = UIModalTransitionStyle.CrossDissolve;
alertController.ModalPresentationStyle = UIModalPresentationStyle.OverCurrentContext;
//This assumes your properties are called Title, Message and Image
alertController.Title = title;
alertController.Message = message;
alertController.Image = image;
return alertController;
}
3 свойства, использованные выше (Title,Сообщение и изображение) выглядит следующим образом:
public new string Title { get; private set; }
public string Message { get; private set; }
public UIImage Image { get; private set; }
Почему эти свойства?потому что к моменту создания класса элементы управления в представлении еще не доступны.Они будут доступны только после загрузки представления.Вот почему нам нужно будет добавить другие изменения, как показано ниже.
Здесь мы устанавливаем значения для элементов управления в пользовательском интерфейсе
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
this.titleLabel.Text = Title;
this.messageLabel.Text = Message;
//If you don't set an image while Create, it will use the default image you set on the Designer.
if (Image != null)
{
this.imageView.Image = Image;
}
}
Теперь из любого другого ViewController вы можете вызватьэтот ViewController, как если бы вы вызывали AlertViewController:
private void ShowMyAlertController()
{
var alert = NiceAlertController.Create("Hello", "My nice alert controller");
this.PresentViewController(alert, true, null);
}
И он должен выглядеть следующим образом:
для обработки действий(Что делать, когда кнопки нажимаются) вы можете создать специальные методы, такие как:
public void AddDefaultAction(string title, Action action)
{
//Logic here
}
public void AddCancelAction(string title, Action action)
{
//Logic here
}
public void AddDestructiveAction(string title, Action action)
{
//Logic here
}
Надеюсь, что это дает вам представление о том, как создать пользовательский UIViewcontroller и сделать его похожим на UIAlertViewController.
Надеюсь, это поможет .-