2015-11-27 5 views
9

Ich habe eine UIView mit einem Button darauf und muss den Fokus auf die Schaltfläche setzen, wenn die Ansicht der self.view hinzugefügt wird, aber ich weiß nicht, warum die Schaltfläche nicht Fokus wenn die Ansicht hinzugefügt wird!tvOS: Erzwinge die Fokussierung einer Schaltfläche

- (void)didUpdateFocusInContext:(UIFocusUpdateContext *)context withAnimationCoordinator: (UIFocusAnimationCoordinator *)coordinator { 



     if (context.nextFocusedView == backButton) { 

      [UIView animateWithDuration:1 delay:0 usingSpringWithDamping:.40 initialSpringVelocity:.60 options:UIViewAnimationOptionAllowUserInteraction animations:^ { 

       context.nextFocusedView.transform = CGAffineTransformMakeScale(1.5, 1.5); 
       context.nextFocusedView.layer.shadowOffset = CGSizeMake(0, 10); 
       context.nextFocusedView.layer.shadowOpacity = 1; 
       context.nextFocusedView.layer.shadowRadius = 15; 
       context.nextFocusedView.layer.shadowColor = [UIColor redColor].CGColor; 
       context.nextFocusedView.layer.shadowOpacity = 1; 

      } completion:nil]; 


     } 

} 

Ich habe versucht, auch andere Eigenschaften:

- (void)openView { 

     [backButton preferredFocusedView]; 
     [backButton canBecomeFocused]; 
     [backButton setNeedsFocusUpdate]; 

     [self.view addSubView:customView]; 
} 

- (UIView *)preferredFocusedView { 

     return [backButton preferredFocusedView]; 
} 

aber keiner von ihnen hat funktioniert!

+1

Ihre Frage bezieht sich auf tvOS, nicht auf iOS oder Xcode. Verwenden Sie nur relevante Tags in einer Frage. – rmaddy

+0

@rmaddy iOS- und Xcode-Tags haben mehr Möglichkeiten zum Ansehen !!! als tvOS, das nur 200 Tags hat, bitte editiere meine Frage nicht –

+2

Sie markieren keine Frage, um mehr Ansichten zu bekommen. Sie taggen eine Frage, damit Leute mit dem richtigen Wissen Ihre Frage sehen. Ihre Frage bezieht sich nicht auf iOS oder Xcode. Wozu die falschen Tags verwenden? Sicher, Sie erhalten möglicherweise mehr Ansichten, aber diese zusätzlichen Ansichten stammen von Personen, die wahrscheinlich nicht über das erforderliche Wissen verfügen. Durch Ihre Logik sollten Sie auch Java und Android Tags hinzufügen. Das wird dir viel mehr Ansichten geben. – rmaddy

Antwort

4

Dies sollte funktionieren.

- (UIView *)preferredFocusedView { 

     return backButton; 
} 

Statt der Rückkehr [backbutton preferredFocusedView], einfach backbutton zurück.

6

Angenommen, Sie haben einen UIViewController mit einer Eigenschaft backButton (einem UIButton). Diese Schaltfläche wurde ordnungsgemäß eingerichtet und befindet sich innerhalb der sichtbaren Grenzen der ViewController-Ansicht. Es sollte auch eine Aktion für das Ereignis UIControlEventPrimaryActionTriggered definiert sein.

Wenn Sie auf die Schaltfläche wollen fokussiert werden, wenn die Ansicht des UIViewController gezeigt wird, kehren diese Taste für preferredFocusedView:

- (UIView *)preferredFocusedView { 
    return self.backButton; 
} 

Aber wenn man es zu fokussiere zu einem anderen Zeitpunkt in der Ansicht Lifecycle oder Benutzer wollen fließen, würden Sie eine andere Methode verwenden.

Wenn Sie beispielsweise möchten, dass eine Schaltfläche zu einem beliebigen Zeitpunkt fokussiert wird: Stellen Sie sicher, dass die Schaltfläche über preferredFocusedView zurückgegeben wird, und rufen Sie dann setNeedsFocusUpdate im Fokuskontext auf (in einem einfachen Fall den Ansichtscontroller).

0

Sie müssen die Ansicht fokussieren von preferredFocusView und rufen Sie setNeedsFocusUpdate zurück, so dass das Fokussystem den Fokus darauf verschiebt.