Как получить кнопки в ячейке UICollectionView, работающего на tvOS (AppleTV), чтобы сфокусироваться?

Вот мой самый простой код. Он показывает пять ячеек в UICollectionView (каждая ячейка с простой кнопкой). Все кнопки указывают на единственный метод IBAction. Все это настраивается в Main.storyboard.

Я не могу заставить tvOS сфокусироваться на кнопках. Есть идеи, почему?

#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

введите описание изображения здесь


person Ethan Allen    schedule 14.09.2015    source источник


Ответы (2)


По умолчанию UICollectionViewCell является фокусируемым, что означает, что он получит фокус вместо своего подпредставления, но вы можете переопределить эту функциональность, переопределив preferredFocusedView и вернув любое представление, которое вы хотите получить.

- (UIView *)preferredFocusedView
{
    return _button;
}

подробнее о Первоначальный фокус и предпочтительная цепочка фокусов

person Adnan Aftab    schedule 14.09.2015
comment
Для любой настройки для UICollectionviewCell вы можете просто переопределить: - person creative_rd; 30.12.2015

или вы можете просто

- (BOOL)collectionView:(UICollectionView *)collectionView canFocusItemAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}
person Mikael Stenberg    schedule 01.03.2016