iPhone SDK: добавление UISlider и UISwitch в табличное представление происходит только при сенсорном слайдере? - PullRequest
3 голосов
/ 20 октября 2010

ОК, вот мой вопрос Например, я создаю UIS-переключатель в accessoryView первых 3 ячеек

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

и добавьте 2 ползунка в следующие 3 ячейки

        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:)

вопрос.

если я переключу UIS-переключатель, он не рухнет

но если я прикоснусь к любому ползунку, он вылетит и получит сообщение: «[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 Ответ

2 голосов
/ 20 октября 2010

UPDATE
После комментариев, вот общий селектор, который вы должны использовать.
Примечание: вам нужно будет вызвать 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");
    }   
}
...