2012-05-14 7 views
5

Ich verwende diesen MBProgressHUD Code:MBProgressHUD Blöcke Wechselwirkungen mit einem UIScrollView, wenn gezeigt

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
    hud.mode = MBProgressHUDModeText; 
    hud.removeFromSuperViewOnHide = YES; 
    [hud hide:YES afterDelay:1]; 

Für den Zeitraum, dass das HUD mit einem UIScrollView gezeigt Wechselwirkungen wird (enthält die Schaltfläche diese von genannt wird) sind behindert. Ich kann nicht auf andere Schaltflächen klicken oder die UIScrollansicht scrollen.

Warum blockiert MBProgressHUD meine Interaktionen mit dem UIScrollView und wie kann ich sie deaktivieren?

+0

MBProgressHUD verwendet, wenn Sie Aufgaben ausführen, die Sie warten müssen. Es wird angenommen, dass Sie mit nichts interagieren müssen, bis der Prozess abgeschlossen ist. Wie auch immer, feuern Sie Ihre Aufgabe auf einem anderen Thread ?. MBProgressHUD sollte sich im Hauptthread befinden und die Aufgabe, die Sie ausführen möchten, muss sich in einem anderen Thread befinden. –

+0

Es ist einfacher als das, ich möchte nur eine kurze Nachricht anzeigen, wenn eine Schaltfläche angetippt wurde. Aber die Leute möchten vielleicht die Knöpfe wechseln, bevor die Animation verschwindet. –

Antwort

17

I MBProgressHUD Version 0.5 und einfach eingestellt bin mit:

HUD.userInteractionEnabled = NO; 

Mit dieser Interaktion mit dem Benutzer in übergeordneter Ansicht ermöglichen.

0

vielleicht, weil die Tasten in der gleichen Ansicht sind, was Sie versuchen, den Fortschritt Ansicht hinzuzufügen und wenn die Fortschrittsanzeige in Sicht ist diese Ansicht blockiert die Ansicht, was die Tasten hinzugefügt werden.

0

MBPregressHUD blockiert die Interaktion in folgenden Verfahren

-(void)show:(BOOL)animated{ 
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
    ... 
    ... 
    ... 
} 

Diese Codezeile blockiert alle Interaktionen innerhalb Ihrer Anwendung. Wenn Sie die Interaktionen halten wollen, fahren sie durch eine Klassenstufe BOOL, können Sie es isModal anrufen und entscheiden, ob Sie die Interaktionen blockieren möchten oder nicht

-(void)show:(BOOL)animated{ 
     if(isModal){ 
     [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
     } 
     ... 
     ... 
     ... 
    } 

Im Idealfall sollten Sie einen neuen ‚init‘ erstellen Methode, um dieses BOOL als Parameter zu nehmen. Mögliche Signatur könnte

- (id)initWithView:(UIView *)view isModal:(BOOL)modal; 

sein und dann initialisieren Sie die Klassenebene BOOL innerhalb dieser Methode nach der Initialisierung der Ansicht. Die gleiche Bedingung sollte in der Methode 'hide' angewendet werden.

Glücklich Codierung ... :)

+1

Vielleicht war dies eine mögliche Lösung für dieses Problem, aber zum Zeitpunkt dieses Beitrags ruft die Implementierung der MBProgressHUD; s show-Methode 'beginIgnoringInteractionEvents' nicht mehr auf, sondern blockiert die UI trotzdem. Ich schätze das liegt daran, dass MBProgressHUD eine Unterklasse von UIView ist, die keine Event-Handling-Methoden implementiert (d. H. TouchesBegan/Moved/Beendet/Cancelled) und somit die Responder-Kette durchbricht. – Tafkadasoh

Verwandte Themen