2016-04-20 11 views
1

Ich versuche, die Peek-und Pop-Funktionalität in einem TableViewController zu implementieren, so dass wenn ich 3DTouch eine der Zellen, zeigt es mir eine Vorschau der SFSafariViewController sie werden mich nehmen um sie zu klopfen. Die Peek-Funktion funktioniert einwandfrei, aber sobald sie in den Pop-Zustand übergeht, gibt sie SFSafariViewController nicht in der desired state, sondern zeigt stattdessen den Navigations-Controller aus der vorherigen Ansicht, und eine schlecht große Ansicht zeigt die SFViewController(Image Here).Problem mit SFSafariViewController auf 3DTouch (Pop State)

Dies ist, wie ich die Peek-und Pop-Funktionalität in meinem TableViewController programmiert haben:

extension MyBlogsTableViewController: UIViewControllerPreviewingDelegate { 

func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { 
    if let indexPath = tableView.indexPathForRowAtPoint(location) { 

      let cell = tableView.cellForRowAtIndexPath(indexPath) as! MyBlogsTableViewCell 

      let destinationViewController = SFViewControllerToExplore(indexPath.row) 
      destinationViewController.preferredContentSize = CGSize(width: 0.0, height: 0.0) 

      previewingContext.sourceRect = cell.frame 

      return destinationViewController 
    } 
    return nil 
} 

func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) { 
    navigationController?.pushViewController(viewControllerToCommit, animated: true) 
} 

private func touchedView(view: UIView, location: CGPoint) -> Bool { 
    let locationInView = view.convertPoint(location, fromView: tableView) 
    return CGRectContainsPoint(view.bounds, locationInView) 
} 

private func SFViewControllerToExplore(index: Int) -> UIViewController { 
    var destinationController: SFSafariViewController 

    destinationController = SFSafariViewController(URL: NSURL(string: identifierOfLinks[index])!, entersReaderIfAvailable: true) 

    return destinationController 
} 

} 
+0

Sie haben vergessen natürlich das Bild. – msparer

+0

@msparer ja, tut mir leid. Der Beitrag wurde mit einem Link zu Bildern aktualisiert. –

Antwort

1

figured it out. So in dem folgenden Code:

func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) { 
    navigationController?.pushViewController(viewControllerToCommit, animated: true) 
} 

sollte ich eigentlich nicht mit Pushviewcontroller sein, sollte ich stattdessen verwenden presentViewController

Corrected Code:

func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) { 
    navigationController?.presentViewController(viewControllerToCommit, animated: true, completion: nil) 
} 
Verwandte Themen