Вместо того, чтобы создавать подклассы UIAlertView, я предпочитаю создавать простые классы, которые обычно имеют метод show, который принимает параметр делегата.Протокол делегата затем имеет выразительные методы, которые соответствуют доступным опциям.
Хотя этот подход приводит к большему количеству функций делегата, чем в типичном подходе к делегированию представления предупреждений, я думаю, что он делает код намного более читабельным.
Код обычно выглядит следующим образом (Swift):
@objc protocol DeleteUniverseAlertViewDelegate {
func deleteUniverseAlertViewDidConfirmDelete(view: DeleteUniverseAlertView)
}
class DeleteUniverseAlertView : NSObject, UIAlertViewDelegate {
private weak var delegate: DeleteUniverseAlertViewDelegate? = nil
class func showWithDelegate(delegate: DeleteUniverseAlertViewDelegate) -> DeleteUniverseAlertView {
let view = DeleteUniverseAlertView()
view.delegate = delegate
UIAlertView(title: "Delete universe?", message: "Are you really, really sure about this?", delegate: view, cancelButtonTitle: "Cancel", otherButtonTitles: "Yes, delete!").show()
return view
}
func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {
if (buttonIndex > 0) {
delegate?.deleteUniverseAlertViewDidConfirmDelete(self)
}
}
}
Когда вам нужно показать это предупреждение, просто внедрите протокол и покажите пользовательское предупреждение, как это (не забывайте сохранять сильную ссылку напредставление оповещения):
deleteAlert = DeletePlaceAlertView.showWithDelegate(self)