I’m creating a barButton which when pressed should set the editing mode of a UITableView to yes. Here’s my code:
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle: @"Edit"
style: self.navigationController.navigationItem.leftBarButtonItem.style
target: self
action: ];
What I don’t understand is what I need to put as an argument for the action part so that I can execute a code block there. I could easily enough put @selector(someMethod) but I’m only executing one or two lines and creating another method is pretty pointless.
Thanks for any help!
Further to pgb’s comment, writing something like this would solve the problem:
And:
So you’ve created a custom object that wraps a block and issues it upon a particular selector.
EDIT: as noted below,
UIControls don’t retain their targets. So probably the easiest thing is to tie the lifetime of the block holder to the lifetime of the control; that’s not necessarily ideal because then the holder will outlive its usefulness if you subsequently remove it as a target while keeping the control alive, but it’s probably suitable for the majority of cases.Options are either to use Objective-C’s built in associated objects, or to use the fact that
UIControlinherits fromUIView, giving it aCALayer, which can store arbitrary keyed objects.Justin Spahr-Summers links to a well documented, public domain implementation of the former in his comment below so I’ll show an example of the latter, even though it’s hacky, for the purposes of discussion.