Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 913
Shekhu Avatar asked Nov 01 '13 09:11

Shekhu


2 Answers

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.

like image 51
SpaceTrucker Avatar answered Sep 19 '22 12:09

SpaceTrucker


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);
like image 33
Shekhu Avatar answered Sep 18 '22 12:09

Shekhu