2017-10-06 14 views
0

하나의 ViewController에 두 개의 UITableViewUIView이 있는데, Peek 및 Pop을 구현하려고하지만 두 테이블을 모두 등록 할 때마다 첫 번째 테이블에서만 작동합니다 . 나는 UITableViews를 등록하고있어 어디 다음과 같습니다하나의 UIViewController에서 여러 개의 UITableView를 구현합니다.

if traitCollection.forceTouchCapability == UIForceTouchCapability.available { 
    registerForPreviewing(with: self, sourceView: self.tableView2) 
    registerForPreviewing(with: self, sourceView: self.tableView) 
} 

viewControllerForLocation :

 if tableView.point(inside: tableViewPoint, with: nil) { 
      guard let indexPath = self.tableView.indexPathForRow(at: location) else { return nil } 
      guard let cell = self.tableView.cellForRow(at: indexPath) else { return nil } 
      let storyBoard = UIStoryboard(name: "Home", bundle: nil) 
      guard let previewViewController = storyBoard.instantiateViewController(withIdentifier: "article_page") as? ArticleViewController else { return nil } 
      previewViewController.preferredContentSize = CGSize(width: 0.0, height: 550) 

      previewViewController.passedValue = article_ids[(indexPath as NSIndexPath).row] 

      previewingContext.sourceRect = cell.frame 
      return previewViewController 
     } else { 
      guard let indexPath = self.tableView2.indexPathForRow(at: location) else { return nil } 
      guard let cell = self.tableView2.cellForRow(at: indexPath) else { return nil } 
      let storyBoard = UIStoryboard(name: "Home", bundle: nil) 
      guard let previewViewController = storyBoard.instantiateViewController(withIdentifier: "article_page") as? ArticleViewController else { return nil } 
      previewViewController.preferredContentSize = CGSize(width: 0.0, height: 550) 
      if indexPath.row == 0 { 
       previewViewController.passedValue = 1001 
      } else { 
       previewViewController.passedValue = weekly_article_id_[(indexPath as NSIndexPath).row - 1] 
      } 
      previewingContext.sourceRect = cell.frame 
      return previewViewController 
     } 

은 위의 작동하지 않습니다. (아마도 잘못 구현되어서 나에게 의미가 없기 때문일 수 있습니다.) 나는 또한 this 솔루션을 시도했지만 예상대로 작동하지 않습니다. 내가 찾는 것은 다음과 같습니다 :

if sourceView == tableView { 
//first tableView implementation 
} else { 
//second tableView implementation 
} 

어떤 도움을 주실 수 있습니다. 나는 지난 4 시간 동안 머리를 부순다.

답변

1

나는 아마도 소스보기 그냥보기 인으로, 한 번만 미리보기를 등록하려고 할 것 : previewingContext 방법은 그것이 어느 결정하기 위해 각있는 tableView에이 점을 변환 당신의 그런

registerForPreviewing(with: self, sourceView: self.view) 

:

let tableViewPoint = self.view.convert(location, to: self.tableView) 
if let indexPath1 = self.tableView.indexPathForRow(at: tableViewPoint) { 
    // Point is within first table - get the cell at this indexPath and handle 
} 
else { 
    let tableViewPoint2 = self.view.convert(location, to: self.tableView2) 
    if let indexPath2 = self.tableView2.indexPathForRow(at: tableViewPoint2) { 
     // Point is within second table - get the cell at this indexPath and handle 
    }    
} 
+0

매력처럼 작동합니다! 감사! –