3

tvOS用のアプリケーションを作成しています。を含むビューUIButtonと、UIView他のいくつかのカスタム ビューを含むカスタムがあります。シミュレーターはUIButton、カスタム ビューではなく、のみを強調表示できます。

Building Apple TV Apps Docsによると:

カスタム ビューをフォーカス可能にする必要がある場合は、canBecomeFocused をオーバーライドして YES を返します (デフォルトでは NO を返します)。

canBecomeFocused Docsによると:

canBecomeFocused が返されます

ビューをフォーカスできる場合は YES。そうでなければいいえ。

ただし、次のようにして canBecomeFocused に YES を割り当てようとしています。

self.customView.canBecomeFocused = YES;

このエラーが発生します:

No setter method 'setCanBecomeFocused:' for assignment to property

どうすればこれを達成できますか?

4

3 に答える 3

8

UIView関数/プロパティを宣言しているようです。

そのように関数をオーバーライドしようとしましたか?

迅速

override func canBecomeFocused() -> Bool {
    return true
}

Objective-C

- (BOOL)canBecomeFocused {
    return YES;
}

私はこれを試していませんが、うまくいくかもしれません。

于 2015-09-24T17:40:51.127 に答える
4

canBecomeFocusedカスタムビューでメソッドをオーバーライドする以外に:

override func canBecomeFocused() -> Bool {
    return true
}

カスタム ビューuserInteractionEnabledが true であることを確認します。これは、ビューにフォーカスできることを確認するための完全なリストです:

このビューがフォーカスできないのはなぜですか?

フォーカス可能であると予想されるビューがそうでない可能性がある理由はいくつかあります (ただし、これらに限定されません)。

  • ビューの canBecomeFocused メソッドは NO を返します。
  • ビューの隠しプロパティの値は YES です。
  • ビューの alpha プロパティの値は 0 です。
  • ビューのユーザー操作は無効になっています。
  • ビューは、その上にある別のビューによって隠されています。
于 2015-10-01T12:11:05.887 に答える
0

上記の答えは、私のcustomViewコードブロックでは不十分です。

迅速

import UIKit

class Focus: UIView {

    /*
    // Only override drawRect: if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func drawRect(rect: CGRect) {
        // Drawing code
    }
    */

    override func canBecomeFocused() -> Bool {
        return true
    }

    override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
        if context.previouslyFocusedView === self {
            UIView.animateWithDuration(0.1, animations: { () -> Void in
                context.previouslyFocusedView?.transform = CGAffineTransformMakeScale(1.0, 1.0)
            })
        }

        if context.nextFocusedView === self {
            UIView.animateWithDuration(0.1, animations: { () -> Void in
                context.nextFocusedView?.transform = CGAffineTransformMakeScale(1.4, 1.4)
            })
        }
    }
}
于 2015-11-28T14:59:04.500 に答える