tvOS 检查当前聚焦的 UI 元素是否为 CollectionViewCell



我正在尝试构建我的tvOS UI,使其看起来类似于Apple TV主屏幕。当您专注于应用程序时,背景中会显示一个较大的图像。(顶部货架区域)。问题是,当我调用didUpdateFocusInContext方法时,背景图像会像它应该的那样更改,但仅在浏览集合视图单元格时。一旦我将焦点放在标签栏上,应用程序就会崩溃并显示错误:

无法将类型为"UITabBarButton"的值强制转换为 CustomCollectionViewCell。

我想我只是不知道如何检查聚焦的 ui 元素是否是自定义收藏视图单元格。这是我所拥有的:

func collectionView(collectionView: UICollectionView, didUpdateFocusInContext context: UICollectionViewFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
        let cell: CustomCollectionViewCell = context.nextFocusedView as! CustomCollectionViewCell
        let indexPath: NSIndexPath? = self.collectionView.indexPathForCell(cell)
        mainImageView.image = UIImage(named: images[indexPath!.row])
}

这是因为您正在强制context.nextFocusedView CustomCollectionViewCell。您可以通过检查context.nextFocusedView是否确实属于您期望的类型来避免崩溃,然后才继续执行您想要执行的操作:

func collectionView(collectionView: UICollectionView, didUpdateFocusInContext context: UICollectionViewFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
    if let cell = context.nextFocusedView as? CustomCollectionViewCell {
        let indexPath: NSIndexPath? = self.collectionView.indexPathForCell(cell)
        mainImageView.image = UIImage(named: images[indexPath!.row])
    }
}

一般来说,当强制打开包装(!)或强制投掷as!任何东西时要小心。

相关内容

  • 没有找到相关文章

最新更新