2016-06-28 2 views
3

Ähnlich wie Apples Photo App, verwende ich Peek und Pop auf einer SammlungView of Bilder. Wenn Sie auf eine Zelle blicken, wird Ihnen das Bild auf einem PhotoViewController angezeigt, der dieses Bild nur in einer Bildansicht anzeigt. Apple bietet 4 verschiedene Vorschauaktionen: Kopieren, Teilen, Favoriten, Löschen. Wenn der Benutzer auf "Löschen" klickt, werden die Vorschauaktionen aktualisiert auf: Löschen und Abbrechen. Das Peek-Bild zeigt immer noch.iOS So bestätigen Sie "Löschen" für UIPreviewActions auf Bildern von CollectionView

In meinem eigenen Code kann ich die Vorschauaktionen einrichten und das Foto löschen, aber ich kann das Löschen nicht bestätigen, bevor es auftritt. Ich kann auch nicht herausfinden, wie man die Peek-Ansicht mit den neuen Vorschau-Aktionen von Delete oder Cancel offen hält (oder wieder öffnet).

Frage: Wie kann ich den Benutzer die Löschung bestätigen, bevor es passiert?

Ich habe versucht, einen UIAlertController in die UIPreviewAction zu setzen, bekomme aber eine Warnung: "Versuch zu präsentieren, wessen Sicht nicht in der Fensterhierarchie ist!" Ich habe ein paar Alternativen ausprobiert, wie zum Beispiel die Verwendung von keyWindow, um den alertController zu präsentieren, aber ich konnte nicht schnell genug arbeiten. Ich gehe davon aus, dass ich eine weitere Benachrichtigung für die Sammlungsansicht festlegen kann. Wenn der Peek mit einem "Löschen" beendet wird, erscheint ein Alarm-Controller, der den Benutzer auffordert, den Löschvorgang zu bestätigen, aber zu diesem Zeitpunkt wird das Bild nicht mehr angezeigt.

Irgendwelche Vorschläge? Hier sind die Alternativen, die ich bisher benutzt habe.

UIPreviewAction *delete = [UIPreviewAction actionWithTitle:@"Delete" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) 
    { 

//create alertController 
... 

// 1. present alertController: 
[self presentViewController:alertController animated:YES completion:nil]; 

// 2. Alternatively tried to present alertController using keyWindow   
UIViewController *top = [UIApplication sharedApplication].keyWindow.rootViewController; 
[top presentViewController:alertController animated:YES completion: nil]; 

//3. notify the presenting view controller that the user has deleted the image and set up an alert to occur after the peek view closes. 

[[NSNotificationCenter defaultCenter] postNotificationName:@"deleteAlert" object:nil]; 
} 

Antwort

0

Ich weiß, es ist eine alte Fragen, aber die Lösung ist ziemlich einfach, so dass es hier zu veröffentlichen!

Swift 3

 let closeTabAction = UIPreviewAction(title: "Close Tab", style: .destructive, handler: { (action, viewController) in 
      //this is confirmation action 
     }) 

     let closeTabCancelAction = UIPreviewAction(title: "Cancel", style: .default, handler: { (action, viewController) in 
      //cancel action, don't need anything here 
     }) 


     //UIPreviewActionGroup, this is the main action 
     let closeTabGroup = UIPreviewActionGroup(title: "Close Tab", style: .destructive, actions: [closeTabAction, closeTabCancelAction]) 

     return [closeTabGroup] 

Grundsätzlich müssen Sie nur die UIPreviewActionGroup verwenden Untermenüs zu erstellen. Apple Docs

Verwandte Themen