检测触发UIControl操作的事件类型

时间:2016-02-17 23:58:23

标签: ios objective-c cocoa-touch uicontrol

我有一个带有动作方法回调的自定义UIControl子类。我想在调整时在UILabel上显示控件元素的值,然后我希望在用户停止调整控件时隐藏标签。

因此,我已将UIControlEventValueChangedUIControlEventTouchUpInside的操作相关联。两者都成功调用了我的动作方法。但是,要在此方法中做不同的事情,我需要知道哪个事件触发了该方法。我怎样才能做到这一点?我查看UIControl并没有看到明显的财产。对于这两种行为,state似乎都会返回1

这样的事情:

    - (void)handleSlider1:(CustomSlider*)sender {

        if (sender.state == UIControlEventValueChanged) {
            // code
        } else {
            // different code
        }
    }

2 个答案:

答案 0 :(得分:1)

您可以通过将每个事件分别连接到单独的IBAction来轻松区分这两个事件。然后,每个新操作都会调用您的单个处理程序,并传递相应的UIControlEvent值:

- (IBAction)sliderValueChanged:(CustomSlider *)slider
{
    [self handleSlider1:slider forEvent:UIControlEventValueChanged];   
}

- (IBAction)sliderValueChanged:(CustomSlider *)slider
{
    [self handleSlider1:slider forEvent:UIControlEventTouchUpInside];   
}

- (void)handleSlider1:(CustomSlider *)sender forEvent:(UIControlEvents)event
{
    if (event == UIControlEventValueChanged)
    //...
}

答案 1 :(得分:0)

如果您想使用相同的方法来处理这两个事件,那么您可以检查控件的突出显示的属性:

if (sender.highlighted) {
   // slider is changing value (value changed)
} else {
   // slider has stopped changing value (touch up inside)
}

或者,您可以简单地创建两个单独的操作方法,并将每个事件连接到所需的方法。