2017-01-03 5 views
2

Я хочу заглянуть в контроллер просмотра, который имеет только ImageView и несколько ярлыков в нем, но когда пользователь нажимает сильнее, они попадают в ViewController, что обычно когда пользователь просто нажал на ячейку просмотра таблицы!Peek ViewController, но Pop a Different ViewController - 3D Touch - Swift

Проблема у меня в том, что viewControllerToCommit не имеет указательного пути для определения того, какой контент будет передаваться новому контроллеру View. Это код, который я до сих пор:

func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) { 

    let popViewController = self.storyboard?.instantiateViewController(withIdentifier: "ReadArticleViewController") as! ReadArticleViewController 

    popViewController.storyURL = //This is where i need to be able to get the index path so i can extract the url for the webview 

    self.show(popViewController, sender: self) 

} 

func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { 

    guard let indexPath = tableView.indexPathForRow(at: location) else {return nil} 

    let cell = tableView.cellForRow(at: indexPath) as! ArticleCell 

    let previewViewController = self.storyboard?.instantiateViewController(withIdentifier: "PeekViewController") as! PeekViewController 

    previewViewController.storyImage = cell.pictureView.image 
    previewViewController.storyTitle = cell.titleLabel.text 

    previewViewController.preferredContentSize = CGSize(width: view.frame.width, height: 300) 
    previewingContext.sourceRect = cell.frame 

    return previewViewController 

} 

ответ

2

В viewControllerForLocation, вы имели путь индекса и клетки. Вам необходимо сохранить эту информацию в свойстве экземпляра по мере необходимости, чтобы он появился, если вызывается commit. Это особенно помогло бы, если бы это свойство экземпляра было частью PeekViewController, потому что именно это передано вам в commit (под именем viewControllerToCommit)! Он уже имеет собственность storyImage и собственность storyTitle; ну, дайте ему больше свойств, что бы вам ни понадобилось, когда прибывает commit. Другими словами, используйте PeekViewController в качестве посланника (или, глядя на него другим способом, в виде конверта). Экземпляр, который вы вернули с viewControllerForLocation, является экземпляром, который вы получите в commit как viewControllerToCommit.

+1

Я вижу, также информация в viewControllerToCommit содержит свойства, которые я сохранил в previewViewController? Я пробовал использовать viewControllerToCommit.storyImage, и ничего там не было, так как в нем меня задевали? Я понимаю вас правильно> – Eli

+1

Вы не можете сказать 'viewControllerToCommit.storyImage'. Вы должны _cast_ это в класс, который есть на самом деле. Если это PeekViewController, вы должны сказать '(viewControllerToCommit as! PeekViewController) .storyImage'. – matt

+0

Работает очарование! Спасибо :) – Eli

Смежные вопросы