我有一个带有动作方法回调的自定义UIControl
子类。我想在调整时在UILabel
上显示控件元素的值,然后我希望在用户停止调整控件时隐藏标签。
因此,我已将UIControlEventValueChanged
和UIControlEventTouchUpInside
的操作相关联。两者都成功调用了我的动作方法。但是,要在此方法中做不同的事情,我需要知道哪个事件触发了该方法。我怎样才能做到这一点?我查看UIControl
并没有看到明显的财产。对于这两种行为,state
似乎都会返回1
。
这样的事情:
- (void)handleSlider1:(CustomSlider*)sender {
if (sender.state == UIControlEventValueChanged) {
// code
} else {
// different code
}
}
答案 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)
}
或者,您可以简单地创建两个单独的操作方法,并将每个事件连接到所需的方法。