I am using storyboards and have dragged a scrollview window onto a view. In my code I am programmatically creating a switch object that is somehow not being initialized correctly. The switch appears on the view correctly but whenever I click the switch, an exception is thrown saying
“unrecognized selector sent to instance 0x6a786f0′”
I have also attempted to edit the On/Off text to Yes/No and accessing the switch also throws the same exception. Clearly I have missed something in creating my switch and setting the correct delegates or whatever.
My code to create the switch is..
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 is the name of my UIScrollView that I created in my .h file.
I should note, when the exception is called on clicking the switch, in the error the ‘reason’ is reason: ‘-[UIScrollView actionSwitch:]. When the error is called by trying to adjust the text, the ‘reason’ is reason: ‘-[UIImageView setText:]
Any help on what I am missing would be great.
Thanks
The exception is correct,
UIScrolViewdoes not have a methodactionSwitch:. The target parameter inaddTarget:is the object you want to receive theselector:argument.If your posted code is in the class that has the
actionSwitch:method then you would use self as the target, like so:And as a side note. For a
UISwitchyou generally want your method called forUIControlEventValueChanged, that way if the user just touches the switch but doesn’t “switch” it your method won’t be called.Edit in response to: “I just tried changing to ‘self’ for the UISwitch and the error still occurs. I haven’t created an actionSwitch method.”
Yes, your application would still crash because whatever you pass in as the target must implement the selector/method passed in as the selector.
The view controller is the ideal place to implement this method. A very standard implementation of this event target would look like: