简体   繁体   中英

UIButton not clickable when custom view called

I am new to iPhone development,I need help in understanding the below,as I am able to create newView using the following

UIView *newView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 80, 30)]; 
newView.backgroundColor=[UIColor clearColor];
UIButton *newViewBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];


newViewBtn.frame = CGRectMake(newView.frame.origin.x+5,
                            newView.frame.origin.y+5,60,20);
[newView addSubview:newViewBtn];
[self.view addSubview:newView]; 

Above code is working without any problem. But when I try to create the view using the following, view is created alright, but the button on the view is not clickable.

int randNumX = arc4random() % 150;
int randNumY = arc4random() % 200;
UIView newView=[[UIView alloc]init];
newView.frame =CGRectMake(randNumX, randNumY, 80, 30);

newView.backgroundColor=[UIColor clearColor];

UIButton *newViewBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
newViewBtn.frame  = CGRectMake(newView.frame.origin.x+5
                         ,newView.frame.origin.y+5,60,20);
[newView addSubview:newViewBtn];
[self.view addSubview:newView];

and there is one another scenario if change the following code

 newViewBtn.frame = CGRectMake(newView.frame.origin.x+5
                          ,newView.frame.origin.y+5,60,20);

with the code below app crashes

 newViewBtn.frame =CGRectMake(randNumX+5,randNumY+5,60,20);

Any help will be greatly appreciated,thanks in advance.

I have added the following code already

     newViewBtn addTarget:self action:@selector(btnclick:)forControlEvents:UIControlEventTouchUpInside];

     -(void)btnclick:(id)sender
     {
       //my code
     }

It is working in the first case:

My main concern here is when the newView is draw ,why the button on this view is not clickable

When adding a custom subview to a UIButton you have to turn off the userInteractionEnabled property.

customView.userInteractionEnabled = NO;

then add to your button.

[customButton addSubView:customView];

Otherwise your custom view intercepts touch events before the button since it's added to the top of the view stack.

Here the problem is the Line below ,As the new child view must be according to the parent view

    newViewBtn.frame =CGRectMake(randNumX+5,randNumY+5,60,20);

writting the above as below solved the problem

    newViewBtn.frame =CGRectMake(5,5,60,20);

You need to add target like this...

   UIButton *newViewBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];
   newViewBtn.frame=CGRectMake(newView.frame.origin.x+5,newView.frame.origin.y+5,60,20);
   [newViewBtn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside]; // ---- add this line.....
   [newView addSubview:newViewBtn];

   -(void)btnPressed:(id)sender
   {
        NSLog(@"Btn Pressed");
   }

You forgot this :

 UIButton *newViewBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];
  [newViewBtn addTarget:self action:@selector(clickeMe) forControlEvents:UIControlEventTouchUpInside];

Please try this.

I believe you forgot to add a target (the function called when the button is clicked):

 [newViewBtn addTarget:self action:@selector(yourfunction:) forControlEvents:UIControlEventTouchUpInside];

Make sure that the function you're targeting exists, or it will crash when you click.

- (void) yourfunction {
    NSLog(@"Click Detected");
}

Try following code...

int randNumX = arc4random() % 150;
int randNumY = arc4random() % 200;

UIView newView=[[UIView alloc]init];

newView.frame =CGRectMake(randNumX, randNumY, 80, 30);

newView.backgroundColor=[UIColor clearColor];

UIButton *newViewBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

newViewBtn.frame  = CGRectMake(0,0,60,20);

newViewBtn.center = newView.center;

[newViewBtn addTarget:self action:@selector(btnTapped:) forControlEvents:UIControlEventTouchUpInside];

[newView addSubview:newViewBtn];

[self.view addSubview:newView];


-(void)btnTapped:(id)sender
{
     NSLog(@"btnTapped");
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM