I’m playing around with drawing in iOS apps. I have a class that is a subclass of UIView that draws some lines and stuff. When the user presses a button, I instantiate the class and do an addSubView on the view of the main UIViewController of the app. The more times the user presses that button, the more instances of that class get added to the view. It’s working just fine.
Now I want to provide the user a way to delete one of those views. So far I’ve put a [self removeViewFromSuperview] into the touchesBegan method of the custom UIView. So when the user presses the drawing it gets removed from the view. But, it’s not actually deleted, right? Since the view was instantiated within the method that executes when the button is pressed I have no way to reference it from within the UIViewController. What’s the appropriate way to make sure I’m not wasting memory with a UIView that was created and removed?
On a related note, if I was to put a toggle switch on the main window’s UIView that toggles delete, how can I check from within touchesBegan if that toggle switch is set to delete=yes? Would I have a some sort of boolean variable in the AppDelegate that I can check from within the UIView subclass? How would I reference that?
Thank you for your help,
Stateful
If you add the view like this:
You can remove it without leaking memory:
Regarding the
UISwitch, you don’t need to keep its value anywhere unless you need it for something else. You can access its value directly:You don’t even need an
IBOutlet, you can access the switch with its tag:In this case you must set a unique tag number for the switch in Interface Builder or when you create it.