Программно добавление переключателя в исключение бросков прокрутки - PullRequest
2 голосов
/ 17 января 2012

Я использую раскадровки и перетащил окно просмотра прокрутки на представление.В моем коде я программно создаю объект-переключатель, который как-то неправильно инициализируется.Переключатель отображается в представлении правильно, но всякий раз, когда я нажимаю на него, выдается исключение, говорящее

"нераспознанный селектор, отправленный экземпляру 0x6a786f0 '"

Я также пытался изменить Вкл. / Выкл.текст Да / Нет и доступ к коммутатору также вызывает то же исключение.Очевидно, что я что-то упустил при создании переключателя и настройке правильных делегатов или чего-то еще.

Мой код для создания переключателя: ..

        UISwitch *switchControl = [[UISwitch alloc] initWithFrame:CGRectMake(x, y, 60, 20)];
        [switchControl addTarget:inputsView action:@selector(actionSwitch:) forControlEvents:UIControlEventTouchUpInside];
        [switchControl setBackgroundColor:[UIColor clearColor]];
        //[(UILabel *)[[[[[[switchControl subviews] lastObject] subviews]
        //               objectAtIndex:1] subviews] objectAtIndex:0] setText:@"Yes"];
        //[(UILabel *)[[[[[[switchControl subviews] lastObject] subviews]
        //               objectAtIndex:1] subviews] objectAtIndex:1] setText:@"No"];


        [inputsView addSubview:switchControl];

inputView - это имя моего UIScrollView, которое ясозданный в моем .h файле.

Следует отметить, что при нажатии на переключатель происходит исключение, в качестве причины указывается причина: '- [UIScrollView actionSwitch:].Когда ошибка вызывается при попытке откорректировать текст, «причина» - это причина: '- [UIImageView setText:]

Любая помощь в том, что я пропускаю, будет отличной.

Спасибо

1 Ответ

2 голосов
/ 17 января 2012

Исключение корректно, UIScrolView не имеет метода actionSwitch:.Целевой параметр в addTarget: - это объект, который вы хотите получить аргумент selector:.

Если ваш опубликованный код находится в классе, который имеет метод actionSwitch:, тогда вы будете использовать self в качестве цели,вот так:

[switchControl addTarget:self action:@selector(actionSwitch:) forControlEvents:UIControlEventTouchUpInside];

И в качестве примечания.Для UISwitch вы обычно хотите, чтобы ваш метод вызывался для UIControlEventValueChanged, поэтому, если пользователь просто касается переключателя, но не «переключает» его, ваш метод вызываться не будет.

Отредактируйте в ответ: «Я только что попытался изменить значение« self »для UISwitch, и ошибка все еще возникает. Я не создал метод actionSwitch.»

Да, ваше приложение все равно будет аварийно завершать работу, потому чтовсе, что вы передаете в качестве цели, должно реализовывать селектор / метод, переданный в качестве селектора.

Контроллер представления является идеальным местом для реализации этого метода.Очень стандартная реализация этого целевого события будет выглядеть так:

-(void)actionSwitch:(UISwitch *)theSwitch{
    if (theSwitch.isOn){
        // Switch was switched on respond accordingly 
    }
    else {
        // Switch was switched off respond accordingly 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...