Wie kann ich beim Darstellen einer Popover-Ansicht den Benutzer die Zelle in der übergeordneten Sammlungsansicht auswählen lassen?

8

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?

    
webmagnets 07.04.2015, 12:09
quelle

3 Antworten

11

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:

  

CollectionViewController

%Vor%

Der obige Code ist die CollectionViewController , um die UICollectionViewController und alle ihre Delegaten zu behandeln.

  

CollectionViewCell

%Vor%

Die benutzerdefinierte Zelle mit nur einem UILabel innerhalb.

  

PopoverViewController

%Vor%

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

    
Victor Sigler 08.05.2015, 16:27
quelle
5

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 ...

    
pteofil 06.05.2015 05:57
quelle
3

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%

    
Vijay Masiwal 07.05.2015 14:17
quelle