2016-09-04 4 views
0

Ich benutze MBProgressHUD zum Laden von Bildschirmen in meiner App. Ich habe 26 Vorkommen, wo ich ein anderes HUD benutze.iOS - Global MBProgressHUD Design ändern

Jetzt habe ich beschlossen, eine benutzerdefinierte UIView (eine animierte UIImageView) für das HUD zu verwenden. Ich möchte dies auf alle HUDs anwenden, die ich in meiner App verwende, aber der Code zum Anpassen des HUD ist ungefähr 15 Zeilen lang und es ist definitiv nicht die richtige Methode, um diesen Code jedem einzelnen Vorkommen einer MBProgressHUD in meiner App hinzuzufügen.

Was ist der richtige Weg von hier? Dies ist nicht das erste Mal, dass ich auf ein Problem wie dieses stoße, bei dem ich nicht sicher bin, wie ich meinen Code sauberer und einfacher halten kann.

Antwort

1

Eine Möglichkeit besteht darin, den Spinner im AppDelegate zu deklarieren und die Methoden showSpinner und hideSpinner zu schreiben und auch macro zu definieren, um diese Spinner-Methoden aufzurufen.

Und Sie können dieses Makro nur global in Ihrem Projekt verwenden. Es ist auch einfach, den Spinner-Code im App-Delegaten zu ändern, und Sie müssen nichts ändern.

1

können Sie

1) Unterklasse Ihre MBProgressHUD so berühren Sie nicht Ihre Bibliothek Sie haben

eingebettet

2) Ändern diese Eigenschaften und Parameter in dieser Unterklasse. Es sollte genau hier entworfen werden, da Sie es an mehreren Stellen in Ihrem Code nicht tun müssen.

3) Rufen Sie dann dass Unterklasse überall, da es die gleiche Klasse sein würde, hatte man vor genannt.

1

Sie könnten eine Kategorie unter MBProgressHUD schreiben, um eine benutzerdefinierte Instanz Ihres HUDs zurückzugeben, und diese dann an Orte importieren, an denen Sie sie verwenden, oder in Ihre AppName_Prefix.pch Datei, um sie überall zu importieren.

So wäre es etwa so aussehen:

In MBProgressHUD+Additions.h:

+ (MBProgressHUD *)myCustomizedHUD;

In MBProgressHUD+Additions.m

+ (MBProgressHUD *)myCustomizedHUD { 
    MBProgressHUD *myHUD = [[MBProgressHUD alloc] init]; 
    // customize 
    return myHud; 
}