哪些事件是由UIControl在tvOS上产生的

  • 本文关键字:tvOS UIControl 事件 tvos
  • 更新时间 :
  • 英文 :


UIButton, tvOS产生UIControlEvents.PrimaryActionTriggered(而不是.TouchUpInside,因为它在iOS上),当按钮获得焦点,用户点击遥控器。

UIControl似乎不产生这些事件中的。我看不出它会产生任何事件,事实上,当用户专注于控制并点击遥控器时。

如何为tvOS使用自定义UIControl ?

UIControl不会自动发出任何控制事件。你的子类负责发出事件(通常通过发送自身sendActionsForControlEvents:)。

由于UIControl目前没有用于tvOS的文档,这可能是苹果不希望你子类化它。

无论如何,我只玩了一点,但显然要实现你自己的UIControl子类,你必须覆盖canBecomeFocused来返回YES,你必须覆盖pressesEnded:withEvent:来作用于用户的按下(大概是通过发送自己的sendActionsForControlEvents: .)。

您可能还需要重写pressesBegan:withEvent:以突出显示您的控件。

因为UIControl符合UIFocusEnvironment协议(通过UIView),你可以覆盖didUpdateFocusInContext:withAnimationCoordinator:来更新你的控件的外观取决于它是否有焦点。

我花了几周时间为我用SVG渲染库SVGgh打包的小部件添加tvOS支持,所以我对此有一些感觉。问题是,有什么我认为是一个新的或新的类型的行动:uicontroleventprimaryaction触发器,得到发送时,控制想要沟通的承诺的行动,如在这个响应完成在我的GHButton类UIPress。记得在故事板中将一个选择器连接到这个新动作。

-(void) pressesEnded:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event
{
    [self sendActionsForControlEvents:UIControlEventPrimaryActionTriggered];
    self.beingPressed = NO;
    self.selected = self.selected;
}

但是在分段控制模拟中,动作不是设置在按钮上,而是当聚焦的部分被改变时,如以下(为了清晰而大量编辑)来自我的liegmentedControl类的代码:

- (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动作在分段控制以及但uicontroleventvaluechange似乎工作的方式我期望的。

相关内容

  • 没有找到相关文章

最新更新