2014-01-10 8 views
10

In meinem Storyboard habe ich einen modal segue definiert. Die entsprechende modale Ansicht wird über eine Taste und eine einfache entlassen:iOS: Touch-Ereignisse werden nicht an den nächsten Controller gesendet, während ein Modal abgewiesen wird

- (IBAction)dismiss:(id)sender { 
    [self dismissViewControllerAnimated:YES completion:^{ 
     return; 
    }]; 
} 

funktioniert alles, aber die Sache ist, während dieser Übergang stattfindet, wenn der Benutzer im Hinblick auf die „nächste“ Controller tippt (dh die dass das modal), Berührungsereignisse ersetzt werden durch diese Steuereinrichtung erfasst, bis der Übergang vollständig abgeschlossen ist.

Meine Kette von Controllern ist:

UINavigationController -> visibleViewController -> modal Controller 

(aber beachten Sie, dass die modal Controller tatsächlich von der navigationController präsentiert wird - das ist, wie es Setup standardmäßig in der Storyboard ist).

Wie können Sie sicherstellen, dass, sobald der Übergang beginnt, Ereignisse berühren werden an den nächsten Controller gesendet?

+0

können Sie Ihr Drehbuch bitte zeigen? – Mikael

+0

@Mikael Ich bin mir nicht sicher, warum diese Frage letzte Woche aufkam: Ich habe sie vor mehr als einem Jahr gefragt ... Ich habe diesen Code leider nicht mehr und ich kann mich nicht erinnern, wie ich das Problem gelöst oder gemildert habe Problem. – PJC

Antwort

4

Was Sie beschreiben, ist normales iOS-Verhalten und nicht Modell ViewController spezifisch. Ein- oder Aussteigen ViewController s Push- und Pop verwendet, wird auch für den Übergang warten zu beenden, bevor ViewController auf dem Zielberührungsereignis zu empfangen.

Eine gute Lösung, um dies zu vermeiden wäre, Ihre ViewController in einem Container innerhalb der ersten ViewController zu präsentieren. Das Anzeigen und Verwerfen der ViewController unterliegt Ihrer Verantwortung und erfordert etwas mehr Code (z. B. die Wiedergabe mit dem Alphakanal des Containers), gibt Ihnen jedoch mehr Kontrolle darüber, wer und wann eine Ansicht Berührungsereignisse empfängt.

Zum Beispiel:

- (IBAction)hideContainer:(id)sender { 

    [UIView animateWithDuration:0.4 
          delay:0.0   
         options:UIViewAnimationOptionAllowUserInteraction 
        animations:^ 
          { 
           self.container.alpha = 0; 
          } 
        completion:^(BOOL finished){}]; 
} 
0

Wenn Sie vorhanden oder ein View-Controller-modal entlassen, während der Übergänge Ihres modalen Ansicht des View-Controller wird durch das System hinzugefügt auf Sicht Übergang.

Während der Entlassung, Ansicht Controller, der unter Ihrem modalen war, ist durch eine transparente übergangsweise Sicht, die Berührungen abfängt abgedeckt, so dass es im Grunde gibt es keine einfache Möglichkeit, sie durch sie zu übergeben.

Die Option könnte sein, dass Sie die transitioningDelegate für Ihre modale Präsentation überschreiben, und fügen Sie einige abfangende Ansicht auf die übergehende Sicht unter der Sicht Ihres modalen Controllers. Intercepting Ansicht werden alle Ihre Berührungen während des Übergangs und dann werden Sie sie auf die zugrunde liegende Präsentation View-Controller Ansicht weiterleiten.

z.B. bei Entlassung Übergang würden Sie so etwas wie diese:

Modal VC View 
---------------- 
Intercepting View 
-------------------------- 
Transitioning View 
------------------------------------------- 
Presenting View Controller's view 
------------------------------------------------------------------ 
Window 
------------------------------------------------------------------------------ 

Dann werden Sie theoretisch in der Lage sein, Ihre Hand an die Präsentation View-Controller-Ansicht zu übermitteln.

Verwandte Themen