2016-10-16 3 views
-1

Ich versuche gerade, eine Klasse zu erstellen, die den Prozess der Definition eines UIAlerts vereinfacht.Versuch, ein Objekt zu erstellen, das als UIAlertController-Wrapper fungiert

Da die traditionelle Art und Weise einen Alarm der Initialisierung ist

let alert = UIAlertController(title:"hello world", message: "how are you",preferedStyle: .actionSheet) 
let ok = UIAlertAction(title:"ok",style:.default,handler: {(action) -> Void in print("ok")}) 
alert.addAction(ok) 
self.presentViewController(alert,animated:true,completion:nil) 

jedoch, wie ich in eine Menge von Orten durch aus meiner App das gleiche Format der Alarm sein werde, die, dachte ich eine einzige machen Klasse, die mein gesamtes Alarmobjekt mit allen Aktionen enthält hinzugefügt, so kann ich einfach tun:

let alert = MyAlert() 
self.presentViewController(alert,animated:true,completion:nil) 

ich habe

class myAlert: UIAlertController{ 
    init() { 
    super.init(title:"hello world", message: "how are you", preferredStyle: .actionSheet) 
    } 
} 

Aber ich scheine einen Fehler zu bekommen "Muss einen designierten Initliator der Oberklasse 'UIAlertController' anrufen
Kannst du mir erklären was ich falsch mache und mir die richtige Richtung schicken. Ich bin ziemlich neu zu schnell, so dass jede Hilfe sehr geschätzt wird. Danke

+0

Vererben 'UIAlertController' in Swift ist nicht einfach. In Ziel C ist es jedoch viel einfacher, und ich würde vorschlagen, diesen Weg zu gehen. –

+0

Aus der Dokumentation für 'UIAlertController': *" Die UIAlertController-Klasse ist so zu verwenden, wie sie ist und unterstützt keine Unterklassen. Die Ansichtshierarchie für diese Klasse ist privat und darf nicht geändert werden. "* – rmaddy

Antwort

1

Sie könnten einfach eine extension erstellen und wann immer Sie eine UIAlertController anzeigen möchten, rufen Sie einfach die Methode. Mit einer Erweiterung kann es in Ihrer gesamten App verwendet werden.

extension UIViewController { 
    func displayMessageAlert(withAlertTitle alertTitle: String, andMessage message: String) { 
     let alert = UIAlertController(title: alertTitle, message: message, preferredStyle: .alert) 
     let okAction = UIAlertAction(title: "OK", style: .destructive, handler: nil) 
     alert.addAction(okAction) 
     self.present(alert, animated: true, completion: nil) 
    } 
} 

Verwendung auf einem UIViewController:

self.displayMessageAlert(withAlertTitle: "Your Title", andMessage: "Display your message here.") 
+0

Gibt es einen anderen Weg das erlaubt mir, meine Warnung zu verpacken, anstatt den gesamten UIViewController zu erweitern? Es fühlt sich an wie eine sehr exzessive Erweiterung aller UIViewController –

+1

Wenn Sie eine Warnung anzeigen, ja. Wenn Sie in einer App mehrere Warnmeldungen erstellen, sind 6 Zeilen Code sinnvoll. – Adrian

+0

Vielen Dank für Ihre Hilfe. Ich gebe das eine Chance –

Verwandte Themen