2016-07-16 14 views
1

Ich habe einige Peek UIPreviewActions in meiner iOS Swift App implementiert. Diese Aktionen führen jedoch Segmenttransaktionen durch, die ignoriert werden. Wie kann ich das erreichen?3DTouch UIPreviewAction: performseguewithIdentifier funktioniert nicht

Es gibt eine ähnliche Frage, aber in Objective-C: UIPreviewAction to Mail From Peek

override func previewActionItems() -> [UIPreviewActionItem] { 
    let performSegueAction = UIPreviewAction(title: "Go To View", style: .Default) { (action, viewController) -> Void in 
    self.performSegueWithIdentifier("segueID", sender: self) 
    } 
    return [performSegueAction] 
} 

Antwort

0

Sorry für späte Antwort, aber lief ich in das kürzlich so die Antwort, falls jemand Entsendung sonst findet es nützlich ...

Zu dem Zeitpunkt, zu dem der Handler in Ihrem UIPreviewAction aufgerufen wird, ist der View-Controller bereits aus der Hierarchie entfernt, sodass die Ausführung von Segmenten keine Auswirkung hat. Stattdessen sollten Sie so etwas wie:

class PreviewViewController: UIViewController { 

var performAction: (() -> Void)? 

override func previewActionItems() -> [UIPreviewActionItem] { 
    let performSegueAction = UIPreviewAction(title: "Go To View", style: .Default) { (action, viewController) -> Void in 
     self.performAction?() 
    } 
    return [performSegueAction] 
} 

Und in geordneten Steuerung (aus dem Sie Vorschau starten):

class ParentViewController: UIViewController { 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let vc = segue.destination as? PreviewViewController { 
     vc.handleAction = { 
      self.performSegueWithIdentifier("segueID", sender: self) 
     } 
    } 
    inject(toController: segue.destination) 
} 
Verwandte Themen