Louis Holley
Louis Holley

Reputation: 135

Programmatically code UIButton action

I'm trying to create a button, which once tapped will show a popover of another UIView. To test this out, I have the following code in my viewDidLoad section:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.hard1 = [UIButton buttonWithType:UIButtonTypeCustom];
    [self.hard1 setFrame:CGRectMake(884, 524, 105, 60)]; // set the x,y,width and height based on your specs
    UIImage *buttonImage = [UIImage imageNamed:@"green.jpg"];
    hard1.layer.cornerRadius = 10;
    hard1.clipsToBounds = YES;
    [hard1 addTarget: self
              action: @selector(buttonClicked:)
    forControlEvents: UIControlEventTouchUpInside];
    [self.hard1 setImage:buttonImage forState:UIControlStateNormal];
    [self.view addSubview:self.hard1];
}

and further down:

- (IBAction) buttonClicked: (id)sender
{
    NSLog(@"Tap");
}

however, the console does not log 'Tap' when I hit the button. Any ideas?

Upvotes: 7

Views: 23625

Answers (3)

Kiran
Kiran

Reputation: 345

    self.hard1 = [UIButton buttonWithType:UIButtonTypeCustom];


 [hard1 addTarget: self
              action: @selector(buttonClicked:)    forControlEvents: UIControlEventTouchUpInside];

Replace hard1 to self.hard1

Upvotes: 4

Odrakir
Odrakir

Reputation: 4254

Watch these three lines of code:

hard1.layer.cornerRadius = 10;
hard1.clipsToBounds = YES;
[hard1 addTarget: self
          action: @selector(buttonClicked:)
forControlEvents: UIControlEventTouchUpInside];

You are missing self. in all three. They should be:

self.hard1.layer.cornerRadius = 10;
self.hard1.clipsToBounds = YES;
[self.hard1 addTarget: self
          action: @selector(buttonClicked:)
forControlEvents: UIControlEventTouchUpInside];

Also, if you are creating it programatically, it shouldn't be an IBAction (IB stands for interface builder and this is not created in interface builder).

Upvotes: 12

Srikar Appalaraju
Srikar Appalaraju

Reputation: 73688

You have put the event responder as buttonClicked but in IBAction you have defined buttonTap. This would obviously not work...

It should be

[hard1 addTarget: self
              action: @selector(buttonTap:)
    forControlEvents: UIControlEventTouchUpInside];

Upvotes: 0

Related Questions