Ich kenne die SDK-Dokumentation sagt
Taps außerhalb des Popover-Inhalts schließen das Popover automatisch aus.
Aber ich bin sicher, dass die klugen Leute hier einen Weg gefunden haben :) vielleicht sollte ich die Popover-Ablehnungsfunktion überschreiben?
Danke
BEARBEITEN: Ich habe versucht, die PassthroughViews wie hier vorgeschlagen, und es funktioniert perfekt. Hier ist der Code für den, der es braucht - in diesem Beispiel stelle ich self.view in das Array, was bedeutet, dass wo auch immer außerhalb der Schaltfläche, wo das Popover entstanden ist, nichts das Popover verwirft.
%Vor% Sie müssen die Eigenschaft passthroughViews
festlegen. Aus der Dokumentation:
Ein Array von Ansichten, mit denen der Benutzer interagieren kann, während das Popover sichtbar ist.
@property (nonatomic, copy) NSArray *passthroughViews
Wenn ein Popover aktiv ist, sind Interaktionen mit anderen Ansichten normalerweise deaktiviert, bis das Popover beendet wird. Wenn Sie dieser Eigenschaft ein Array mit Sichten zuweisen, können Taps außerhalb des Popover von den entsprechenden Sichten verarbeitet werden.
Setzen Sie passthroughViews
auf ein Array von Ansichten, die Sie mit dem Touch-Ereignis behandeln wollen, anstatt das Popover einfach zu verwerfen.
Es gibt eine sehr einfache und legitime Lösung. Stellen Sie im View-Controller, der Ihr UIPopoverController
darstellt, das Protokoll UIPopoverControllerDelegate
und implementieren Sie die folgende Delegate-Methode. Ich habe das gerade getestet und es verhindert Popover zu entlassen.
Stellen Sie nur sicher, dass Sie den Delegaten Ihres Popover-Controllers auf den View-Controller gesetzt haben, der dies implementiert.
Sie können das Popover mit [popoverController dismissPopoverAnimated:NO];
method ablehnen.
Die angenommene Antwort beantwortet nicht wirklich die Frage: "Gibt es eine Möglichkeit, das Popover nicht abzuweisen, wenn man es außerhalb drückt?", imo. Es bietet zwar eine mögliche Ansicht, könnte aber hackischen Zugriff auf alle übergeordneten Ansichten erfordern und bestimmen, welche Ansichten auf dem Bildschirm usw. sind. Die Frage könnte wie folgt umformuliert werden: "Wie mache ich eine Popover-Ansicht modal?"
Sie würden dies so tun, mit einer Schaltfläche, um das Popover zu schließen:
%Vor%Dann werden Sie in Ihrer processDoneAction-Methode müssen Sie das Popover zu schließen. Andere Überlegungen wären das Verwerfen und erneute Anzeigen bei Änderungen der Geräteausrichtung, aber ich überlasse das einer anderen Übung, da diese bereits im Stackoverflow beantwortet wurde.