2012-01-17 4 views
2

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

«непризнанный селектор отправляется например 0x6a786f0' »

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

Мой код, чтобы создать переключатель есть ..

 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]; 

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

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

Любая помощь по поводу того, что мне не хватает, будет замечательной.

Благодаря

ответ

2

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

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

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

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

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

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

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

-(void)actionSwitch:(UISwitch *)theSwitch{ 
    if (theSwitch.isOn){ 
     // Switch was switched on respond accordingly 
    } 
    else { 
     // Switch was switched off respond accordingly 
    } 
} 
+0

Причина, по которой я не использовал «я», потому что у меня также есть текстовые поля, которые я программно создаю. С «я» они появлялись в представлении за UIScrollView, и пользователь не мог их видеть. Но я просто попытался перейти на «я» для UISwitch, и ошибка все еще происходит. Я не создал метод actionSwitch. Если бы я сделал это в viewcontroller, в котором находится UIScrollView, это устранит проблему? Кроме того, любая ссылка или информация о том, как создать указанный метод actionswitch, также будут отличными. –

+0

Хорошо, я добавил селектор - (IBAction): (id) actionSwitch {}, но ошибка все еще происходит. Имейте в виду, что я должен создавать их динамически, и есть возможность, в зависимости от пользователя, я никогда не создам коммутаторы. Поэтому я не могу объявить кучу переменных и методов в предположении, что они всегда будут там. –

+0

@JesseDurham, добавленный ответ в ответ на комментарий. – NJones

Смежные вопросы