Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't get programmatically made UIButton to work - iPhone

Here is the code I'm using:

-(void)viewDidLoad
{
    NSString *checkerPath = [[NSBundle mainBundle] pathForResource:@"black-yellow-checker" ofType:@"png"];
    UIImage *checkerImage = [[UIImage alloc] initWithContentsOfFile:checkerPath];
    checkerView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 230.0f, 320.0f, 280.0f)];
    [checkerView setImage:checkerImage];

    UIButton *backButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
    backButton.frame = CGRectMake(45.0f, 175.0f, 230.0f, 50.0f);
    [backButton setBackgroundImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"yellowButton" ofType:@"png"]] forState:UIControlStateNormal];
    [backButton addTarget:self action:@selector(goBackHome:) forControlEvents:UIControlEventTouchDown];
    [backButton setTitle:@"Back" forState:UIControlStateNormal];
    backButton.titleLabel.font = [UIFont fontWithName:@"Marker Felt" size:30];
    backButton.titleLabel.textColor = [UIColor blackColor];
    [checkerView addSubview:backButton];
}

- (void)goBackHome:(id)sender
{
    NSLog(@"go back pressed");
}

Not sure why this doesn't work. The button shows up, but when I press it nothing happens. It doesn't even change to the "indented" image when I touch it. Nothing. Can't use IB, has to be programmatically. Any thoughts?

like image 239
Marty Avatar asked Oct 04 '10 21:10

Marty


2 Answers

UIImageView has userInteractionEnabled set to NO by default. This prevents any subviews from getting touches.

You could either enable user interaction of the image view by

checkerView.userInteractionEnabled = YES;

or create a new UIView to include both checkerView and the backButton.

UIView* newView = ...
...
[newView addSubview:checkerView];
[newView addSubview:backButton];
like image 54
kennytm Avatar answered Oct 22 '22 18:10

kennytm


I believe that the forControlEvents: has to be UIControlEventTouchUpInside.

like image 37
Craig Howarth Avatar answered Oct 22 '22 19:10

Craig Howarth