UISlider发送者valuechanged

时间:2010-08-16 19:36:39

标签: iphone objective-c xcode

我在表单上使用多个UISliders,我只想要一种方法来跟踪滑块的变化。

现在我有一个方法:

- (IBAction) slider1ValueChanged:(UISlider *)sender {  
    somelabel.text = [NSString stringWithFormat:@" %.1f", [sender value]];  
}

但是因为我使用多个滑块,我想使用switch语句来触发特定的滑块,所以例如如果我有2个滑块,并且它们都使用上面的ValueChanged方法,我想要类似的东西:

    - (IBAction) slider1ValueChanged:(UISlider *)sender {
switch(SLIDERID)
case SLIDER1:
      blabla;
      break;
case SLIDER2:
      update other label;
      break;
case default:
      break;
            somelabel.text = [NSString stringWithFormat:@" %.1f", [sender value]];  
    }

谁能帮帮我?

提前致谢!

2 个答案:

答案 0 :(得分:10)

您只需要将sender参数与滑块进行比较,找出哪一个移动了:

-(IBAction) sliderValueChanged:(UISlider*)sender {
    if (sender == self.temperatureSlider) {
        // ...
    } else if (sender == self.altitudeSlider) {
        // ...
    } // etc
}

然后将所有滑块连接到IB中的此操作或通过-setTarget

答案 1 :(得分:0)

为IB中任何UI组件的tag属性赋值,并使用如下所示的开关案例对其进行评估:

typedef enum Commands {
    CMD_PLAY_MUSIC = 0,
    CMD_STOP_MUSIC,
    CMD_PAUSE_MUSIC,
    CMD_EDIT_PLAYLIST,
    CMD_ADJUST_VOLUME,
} Commands;


-(id) processUIEvent:(id) sender {

    int tag = [sender tag];
    switch (tag) {
        case CMD_PLAY_MUSIC:   
            // Code here...
            break;

        case CMD_PAUSE_MUSIC:
            // Code here...                
            break;

        case CMD_EDIT_PLAYLIST:
            // Code here...
            break;

        default:
            // Event not handled
            break;
    }
}