Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get buttons in a cell on a UICollectionView running on tvOS (AppleTV) to take focus?

Here is my very basic code. It shows five cells in a UICollectionView (each cell with a simple button in it). All buttons point to the single IBAction method. This is all setup within the Main.storyboard.

I can't get tvOS to take focus of the buttons though. Any idea why?

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 5;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];
    return cell;
}

- (IBAction)buttonAction
{
    // do stuff
}

@end

enter image description here

like image 576
Ethan Allen Avatar asked Sep 14 '15 02:09

Ethan Allen


2 Answers

By default UICollectionViewCell is a focusable means it will get focus instead of its subview, but you can override this functionality by overriding preferredFocusedView and return which ever view you want to get focus.

- (UIView *)preferredFocusedView
{
    return _button;
}

read more about Initial Focus and the Preferred Focus Chain

like image 160
Adnan Aftab Avatar answered Nov 01 '22 03:11

Adnan Aftab


or you can just

- (BOOL)collectionView:(UICollectionView *)collectionView canFocusItemAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}
like image 4
Mikael Stenberg Avatar answered Nov 01 '22 03:11

Mikael Stenberg