iPhone SDK:在表格视图中添加UISlider和UISwitch只在触摸滑块时崩溃?

时间:2010-10-20 07:56:43

标签: iphone action cell uislider uiswitch

好的,这是我的问题 例如,我在前3个单元的附件中创建了一个UISwitch

theSwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
    [cell addSubview:theSwitch];
    cell.accessoryView = theSwitch;

并在接下来的3个单元格中添加2个滑块

        theSlider =  [[[UISlider alloc] initWithFrame:CGRectMake(174,12,120,23)] autorelease];
        theSlider.maximumValue=99;
        theSlider.minimumValue=0;
        [cell addSubview:theSlider];
        cell.accessoryView = theSlider;

之后,我添加动作切换和滑块

[(UISwitch *)cell.accessoryView addTarget:self action:@selector(switchToggled:) forControlEvents:UIControlEventValueChanged];

[(UISlider *)cell.accessoryView addTarget:self action:@selector(sliderValueChange:) forControlEvents:UIControlEventValueChanged];

只有在单元格中添加开关

才有效

我认为这可能是我的@selector(switchToggled:)@selector(sliderValueChange:)

问题。

如果我切换UISwitch,它不会崩溃

但如果我触摸任何滑块,它会崩溃并收到消息:“[UISlider isOn]:无法识别的选择器发送到实例”

这是我的无效

 - (void)switchToggled:(id)sender{
        UISwitch *theSwitch = (UISwitch *)sender;
        UITableViewCell *cell = (UITableViewCell *)theSwitch.superview;
        UITableView *tableView = (UITableView *)cell.superview;
        NSIndexPath *indexPath = [tableView indexPathForCell:cell];



        if(theSwitch.on) {
               ...
    } 
        else {
              ...
     }

    }

sliderValueChange

完全相同
- (void)sliderValueChange:(id)sender{
    UISlider *theSlider = (UISlider *)sender;
    UITableViewCell *cell = (UITableViewCell *)theSlider.superview;
    UITableView *tableView = (UITableView *)cell.superview;

            ...
}

有谁知道如何给两个控制器一个动作?

非常感谢!

1 个答案:

答案 0 :(得分:2)

<强>更新
评论之后,这是一个你应该使用的通用选择器 注意:您只需使用此选择器调用addTarget一次。

-(void)generalSelector:(id)sender{
    if ([sender isKindOfClass:[UISlider class]]){
        UISlider *slider = (UISlider *)sender;
        NSLog(@"Slider value %f",slider.value);
    }else{
        UISwitch *temp = (UISwitch *)sender;
        NSLog(@"Switch is %@",temp.on?@"ON":@"OFF");
    }   
}