ここ数週間、SVG レンダリング ライブラリSVGghでパッケージ化するウィジェットに tvOS サポートを追加するのに費やしたので、これには多少の感触があります。問題は、新しいまたは新しい種類のアクションであると私が思うものがあることです: UIControlEventPrimaryActionTriggered は、コントロールがアクションのコミットメントを伝えたいときに送信されます。これは、GHButtonクラスの UIPress の完了に対するこの応答のようです。ストーリーボードで、セレクターをこの新しいアクションに接続することを忘れないでください。
-(void) pressesEnded:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event
{
[self sendActionsForControlEvents:UIControlEventPrimaryActionTriggered];
self.beingPressed = NO;
self.selected = self.selected;
}
しかし、セグメント化されたコントロール アナログでは、アクションはボタンを押したときに設定されませんが、次のGHSegmentedControlクラスのコード (わかりやすくするために大幅に編集されています) のように、フォーカスされたセグメントが変更されたときに設定されます。
- (BOOL)shouldUpdateFocusInContext:(UIFocusUpdateContext *)context
{
BOOL result = NO;
if(context.nextFocusedView == self)
{
result = YES;
[self highlight:YES];
if(context.focusHeading == UIFocusHeadingRight)
{
[self incrementValue];
[self.parentContent.control setNeedsFocusUpdate];
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
else if(context.focusHeading == UIFocusHeadingLeft)
{
[self decrementValue];
[self.parentContent.control setNeedsFocusUpdate];
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
}
return result;
}
考えてみると、セグメント化されたコントロールでも UIControlEventPrimaryActionTriggered アクションを送信する必要がある可能性がありますが、UIControlEventValueChanged は期待どおりに動作するようです。