Ich habe eine Sammlungsansicht, und wenn eine Zelle ausgewählt ist, wird eine Popover-Ansicht angezeigt, die mehr Informationen über diese Zelle enthält.
Ich möchte dem Benutzer erlauben, auf eine andere Zelle zu klicken und dann die Popover-Ansicht ändern, um die Informationen dieser Zelle anzuzeigen, ohne das Popover schließen zu müssen. Wenn der Benutzer irgendwo auf die übergeordnete Ansicht klicken soll, die keine Zelle ist, sollte das Popover geschlossen werden. Aber ich möchte, dass der Benutzer weiterhin in der Sammlungsansicht blättern kann, ohne das Popover zu schließen.
Wie kann das gemacht werden?
Laut Apple:
Wenn ein Popover aktiv ist, sind Interaktionen mit anderen Ansichten normalerweise deaktiviert, bis das Popover beendet wird. Wenn dieser Eigenschaft ein Array von Ansichten zugewiesen wird, können Taps außerhalb des Popover-Objekts von den entsprechenden Sichten verarbeitet werden.
Dann können Sie die passthroughViews
auf folgende Weise:
%Vor%CollectionViewController
Der obige Code ist die CollectionViewController
, um die UICollectionViewController
und alle ihre Delegaten zu behandeln.
%Vor%CollectionViewCell
Die benutzerdefinierte Zelle mit nur einem UILabel
innerhalb.
%Vor%PopoverViewController
Und schließlich das PopoverViewController
in Form von .Popover
.
Es gibt einige Beobachtungen, auf die ich hinweisen möchte:
Ich habe eine Referenz auf die Klasse PopoverViewController
gesetzt, um sie im Lebenszyklus zu behalten und sie zu übergeben, wenn sie noch offen ist.
Die Zeile var t = self.popoverViewController!.view
ist notwendig, denn wenn nicht @IBOutlet
in PopoverViewController
nicht init ist, bis sie angezeigt wird, kann es andere Möglichkeiten geben.
Ich präsentiere das Popover in der Mitte des Bildschirms, um mit dem Tippen in mehreren Zellen umzugehen und es auch mit der Rolle zu testen, Sie können es in jeder gewünschten Position anzeigen.
In den Ansichten, die beim Öffnen des Pop-ups erlaubt sind, setze ich self.view
, aber auf diese Weise müssen Sie es für sich selbst ablehnen, weil es nie geschlossen wird, wenn Sie in der Ansicht tippen. Sie können stattdessen jede gewünschte Ansicht einfügen.
Wenn Sie Probleme mit der Lösung haben, kann ich das Projekt auf Github teilen.
Ich hoffe, dass dir das hilft
Was Sie suchen, ist passthroughViews Eigenschaft des Popover.
Wenn Sie jedoch das Popover öffnen, nachdem Sie eine Zelle angetippt haben, sehe ich nicht, wie das Scrollen der CollectionView sinnvoll ist. Öffne das Popover nicht mit dem Pfeil, der auf deine Zelle zeigt? Wenn Sie die Ansicht scrollen, wird die präsentierende Zelle entfernt ...
Sie können die Eigenschaft von UIViewController 'modalInPopover' verwenden, um Berührungen außerhalb der Popover-Grenze zu aktivieren. Schreiben Sie einfach die unten angegebene Zeile in Ihren View-Controller, den Sie mit dem Popover-Controller darstellen.
%Vor%wo self ist eine Art UIViewController.
Ich habe einen Screenshot für das selbe beigefügt.
In swift bleibt die Zeile gleich
%Vor%
Tags und Links ios uicollectionview swift uipopover