2013-05-08 16 views
7

mio pulsante è il seguenteUIButton con visualizzazione personalizzata - addTarget: azione: forControlEvents: non funziona

  1. Creato label1
  2. label2 Creato
  3. Creato CustomView (UIView)
  4. Aggiunto label1 e label2 in visualizzazione personalizzata
  5. Creato myCustomButton (UIButton)
  6. Aggiunto customView su myCustomButton

Ho già eseguito userInteractionEnable per custom_View, label1 e label2.

poi aggiunti

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

E

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

Ma soprattutto la funzione non viene mai chiamato, anche quando mi tocco il pulsante. Qualche soluzione?

+0

Si prega di inserire qui il codice pertinente? –

risposta

18

Solo un piccolo problema con il tuo codice amico, basta aggiungere una sola riga seguente al codice, dimentica di setUserInteractionEnabled:NO a UIView vi permetterà di fare clic sul pulsante

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]; 

Clicca Metodo

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

sei sicuro che la vista 'setUserInteractionEnabled' dovrebbe essere NO? L'ho impostato su Sì, poi ha funzionato! –

+0

sì, poiché il pulsante viene aggiunto in 'self.view' e le etichette sono in' view', ecco perché se disabiliti l'interazione dell'utente. non fa alcuna differenza, in quanto il pulsante e le etichette si trovano in contenitori diversi. –

3

Piuttosto che creare il CustomView (un'istanza di UIView), si aggiunge CustomView come un'istanza di UIControl come anche addTarget al 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]; 

Ora nel metodo CustomViewClicked

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

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

Spero ti possa aiutare.

+0

Grazie per il suggerimento. Ho trovato la soluzione sotto forma di altra risposta ... – Sagrian