2017-05-13 3 views
0

J'espère que quelqu'un pourra m'aider avec ce problème. Voici la capture d'écran de mon application tvOS:Essayer de mettre à jour les éléments de l'interface utilisateur lors du changement de focus entre les cellules de la vue de collection

Screenshot.

Je suis en train de faire deux choses:

  1. Lorsque l'utilisateur fait défiler vers le bas de leur télécommande, le deuxième élément de la CollectionView devient automatiquement mis au point. Je dois l'avoir pour que le premier point soit focalisé à la place. Lorsque l'utilisateur déplace manuellement le focus entre les éléments de collectionView, je souhaite que les éléments de l'interface utilisateur dans la section centrale de l'écran soient mis à jour au lieu d'avoir à les appuyer ou à les sélectionner individuellement.

Voici mon code jusqu'à présent pour cet écran:

import UIKit 

// Global variable 
internal let g_CR1 = "channel_cell_01" 

class DashboardVC: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { 

    // outlets 
    @IBOutlet weak var collectionView: UICollectionView! 
    @IBOutlet weak var lblChannelName: UILabel! 
    @IBOutlet weak var imgChannelLogo: UIImageView! 
    @IBOutlet weak var txtChannelDescription: UITextView! 

    // variables 
    var staticData: [Channel] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // sample channels 
     initializeSampleData() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    // MARK: - CollectionView Callbacks 
    func numberOfSections(in collectionView: UICollectionView) -> Int { 
     return 1 
    } 

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return staticData.count 
    } 

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

     // Get or make a cell 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: g_CR1, for: indexPath) as! CollectionViewCell 

     // Configure 
     cell.imgView.backgroundColor = UIColor.black 
     cell.imgView.image = staticData[indexPath.row].chLogo 

     // Return. 
     return cell 
    } 

    func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool { 
     return true 
    } 

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 

     let currentChannel = staticData[indexPath.row] 

     DispatchQueue.main.async { 
      self.lblChannelName.text = currentChannel.chName 
      self.imgChannelLogo.image = currentChannel.chLogo 
      self.txtChannelDescription.text = currentChannel.chDescription 
     } 
    } 

} 

Répondre

0

j'ai pu répondre le point # 2. Espérons que quelqu'un puisse en bénéficier. Cependant, je suis toujours piétiné au # 1.

func collectionView(_ collectionView: UICollectionView, didUpdateFocusIn context: UICollectionViewFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) { 

    // test 
    print("Previous Focused Path: \(context.previouslyFocusedIndexPath)") 
    print("Next Focused Path: \(context.nextFocusedIndexPath)") 

    let currentChannel = staticData[(context.nextFocusedIndexPath?[1])!] 

    DispatchQueue.main.async { 
     self.lblChannelName.text = currentChannel.chName 
     self.imgChannelLogo.image = currentChannel.chLogo 
     self.txtChannelDescription.text = currentChannel.chDescription 
    } 
}