2013-05-08 19 views
7

Mój przycisk jest następującyUIButton z widoku niestandardowego - addTarget: Działanie: forControlEvents: nie działa

  1. stworzony Label1
  2. Utworzono Label2
  3. Utworzono CustomView (UIView)
  4. Dodane Label1 i Label2 na widok niestandardowy
  5. Utworzono myCustomButton (UIButton)
  6. Dodano niestandardowy widok na myCustomButton

Wykonałem już userInteractionEnable dla custom_View, label1 i label2.

Następnie dodaje

[myCustomButton addTarget:self action:@selector(OnButtonClick:) forControlEvents:UIControlEventTouchUpInside]; 

And

-(void)OnButtonClick:(UIButton *)sender 
{ 
} 

Ale przede funkcji nigdy nie nazywa nawet kiedy dotykam przycisku. Jakieś rozwiązanie?

+0

Proszę wpisać tutaj odpowiedni kod? –

Odpowiedz

18

Tylko niewielki problem z kodem przyjacielu, wystarczy dodać tylko jedną następującą linię kodu, zapomnij setUserInteractionEnabled:NO do UIView pozwoli Ci kliknąć przycisk

UILabel *lbl1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)]; 
[lbl1 setText:@"ONe"]; 
UILabel *lbl2 = [[UILabel alloc] initWithFrame:CGRectMake(0, 30, 100, 30)]; 
[lbl2 setText:@"Two"]; 

UIView * view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 130)]; 
[view setUserInteractionEnabled:NO]; 

[view addSubview:lbl1]; 
[view addSubview:lbl2]; 

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[btn addSubview:view]; 
[btn setFrame:CGRectMake(0, 0, 200, 130)]; 
[btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside]; 

[self.view addSubview:btn]; 

kliknij Metoda

-(void)click 
{ 
    NSLog(@"%s",__FUNCTION__); 
} 
+0

czy jesteś pewien, że widok 'setUserInteractionEnabled' powinien być NIE? Ustawiłem to na tak, to zadziałało! –

+0

tak, ponieważ przycisk jest dodawany w 'self.view', a etykiety są w' widoku', to dlaczego wyłączasz interakcję użytkownika z nim. nie ma to znaczenia, ponieważ przyciski i etykiety znajdują się w innym pojemniku. –

3

Zamiast tworzenia CustomView (instancję UIView), dodać CustomView jako instancji UIControl jak również addTarget do CustomView,

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button setFrame:CGRectMake(10,10,300,300)]; 

UIControl *customView = [[UIControl alloc] initWithFrame:CGRectMake(0,0,300,300)]; 
[customView addTarget:self action:@selector(customViewClicked:) forControlEvents:UIControlEventTouchUpInside]; 

UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(10,10,100,100)]; 
[label1 setText:@"Hello How are you ?"]; 

UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(10,150,100,100)]; 
[label1 setText:@"I am fine Thnank You!"] 

[customView addSubView:lebel1]; 
[customView addSubView:lebel2]; 

Teraz w Metodzie CustomViewClicked

-(void)customViewClicked:(id)sender 
{ 
    UIControl *senderControl = (UICotrol *)sender; 

    NSLog(@"sender control = %@",senderControl); 
} 

Mam nadzieję, że ci to pomoże.

+0

Dzięki za sugestię. Mam rozwiązanie z innej odpowiedzi ... – Sagrian