2016-06-25 6 views
0

documentation을 통해 파고 들었지만 다음 작업을 수행 할 수있는 방법을 찾을 수 없습니다.UISplitViewController on tvOS - 스 와이프 - 세부보기 컨트롤러 사용 안 함

SplitViewControllerUITableView을 마스터로로드하지만 Apple TV를 오른쪽으로 스 와이프하여 자세히보기로 이동할 수 있습니다. 마스터 뷰에서 선택을 한 후에 만 ​​세부보기를 사용할 수 있도록이 제스처를 비활성화하려면 어떻게합니까?

문서에서 var presentsWithGesture: Bool은 옳은 것처럼 들리지만 이미 숨겨진보기에만 해당됩니다. 내 조회수가 나란히 표시되며 둘 다 표시됩니다. 어떤 아이디어?

당신은 당신이 좋아, 상세 뷰 컨트롤러에 초점을 원하거나하지 않을 경우 추적 할 마스터 뷰 컨트롤러에 속성을 만들 수 있습니다

답변

2

: 당신이 초점 업데이트로 향하고 허용하지 shouldUpdateFocusInContext를 오버라이드 (override) 할 필요가 다음

var presentDetail = false 

권리.

override func shouldUpdateFocusInContext(context: UIFocusUpdateContext) -> Bool { 
     if context.focusHeading == .Right { return false } 
     return super.shouldUpdateFocusInContext(context) 
    } 

다음 당신은이 preferredFocusedView 오버라이드 (override) 할 필요가 :

override var preferredFocusedView: UIView?{ 
    if self.presentDetail { 
     self.presentDetail = false 
     guard let vc = self.splitViewController?.viewControllers[1] else { return nil } 
     return vc.view 
    } 
    return self.tableView 
} 

일반적으로 우리는 우리의있는 tableView를 돌아갑니다하지만 우리는 상세 뷰 컨트롤러에 포커스를 이동하고자 할 때 우리는 그 뷰를 돌아갑니다.

는 마지막으로 우리는 didSelectRowAtIndexPath을 구현 :

우리가 우리의 마스터 뷰 컨트롤러 및 세부 뷰 컨트롤러에 초점 엔진에 대한 업데이트를 요청
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     if let vc = self.splitViewController?.viewControllers[1] { 
      self.presentDetail = true 

      self.setNeedsFocusUpdate() 
      self.updateFocusIfNeeded() 

      vc.setNeedsFocusUpdate() 
      vc.updateFocusIfNeeded() 
     } 
    } 

.