iosuibuttonselectorobjective-c-blocks

iOS-UIButton custom target


I add UIButton programmatically (self.button is my property UIButton):

self.button = [[UIButton alloc] initWithFrame:CGRectMake(139, 366, 42, 34)];
[self.button addTarget:self action:@selector(buttonPressed:completion:) forControlEvents:UIControlEventTouchUpInside];

I call programmatically to the button target and also I want the framework to invoke the target when the user push the button.

The target selector is:

-(void)buttonPressed:(UIButton*)sender completion:(void (^)())completionBlock;

The second argument is a block.

When I try to introspection/invoke the block I get an exception EXC_BAD_ACCESS (code=2, address=0x0) I know that I try to invoke UITouchesEvent because of the framework target action.

How can I make custom target with completion block?


Solution

  • You can't pass a completion block there, but you can make something like this:

    self.button = [[UIButton alloc] initWithFrame:CGRectMake(139, 366, 42, 34)];
    [self.button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    
    -(void)buttonPressed:(UIButton*)sender {
        [self buttonPressed:sender completion:^{
            //something
        }];
    }
    
    -(void)buttonPressed:(UIButton*)sender completion:(void (^)())completionBlock {
        //do something
    
        //invoke block
        completionBlock();
    }