2010-10-11 7 views
11

Ho un UIButton in un UIView, che è in un UIViewController che ho allocato e inserito da un file .xib.L'evento UIButton 'Touch Up Inside' non funziona. 'Touch Down' funziona bene

Quando si aggancia un IBAction all'evento 'Touch Down' di un UIButton, esso si attiva correttamente. Ma se lo collego all'evento 'Touch Up Inside' non risponde.

Altri eventi non funzionano. 'Tocca trascina Invio', 'Tocca trascina uscita', 'Ritocco esterno' ecc. Solo tocca giù.

Qualcuno ha idea del perché questo potrebbe essere?


Il pulsante è un semplice pulsante rettangolo arrotondato in un controller di visualizzazione. Ho caricato il controller della vista come tale:

-(void) pushNewViewController 
{ 
    MyViewController* newViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
    [self.view addSubview:newViewController.view]; 
    [newViewController release]; 
} 

Ho aggiunto questo pulsante per pulsante rect arrotondato per MyViewController, in IB. ho creato i seguenti: IBActions

-(IBAction) buttonTouchDown:(id)sender 
{ 
    NSLog(@"Button Touch Down Event Fired."); 
} 

-(IBAction) buttonTouchUpInside:(id)sender 
{ 
    NSLog(@"Button Touch Up Inside Event Fired."); 
} 

Nel menu IB ho cliccato sul pulsante e trascinato l'uscita Touch Down di MyViewController e selezionato buttonTouchDown :. Salvato l'IB xib.

Quando si esegue e si verifica il pulsante e viene visualizzato il messaggio di registro "Pulsante Touchdown evento attivato".

Ma quando torno indietro a IB e cambio l'Azione in Ritocco interno e lo agganci al pulsanteTouchUpInside: IBAction e salva. Esamino di nuovo, non ottengo risposta.

saluti, Rich

+0

Questa domanda è ancora aperta? Proviene da ottobre, hai trovato una soluzione nel frattempo? – Axel

risposta

2

Lei ha parlato di risparmio; hai salvato sia il file xib che i file MyViewController dopo aver apportato le modifiche? Spesso quando qualcosa del genere smette di funzionare per me, trovo che non ho salvato né lo xib in IB né il file di classe in XCode.

6

Stai rilasciando newViewController.

Mentre l'aggiunta del newViewController.view come una visualizzazione secondaria manterrà la vista, l'oggetto newViewController avrà un conteggio di conservare 0.

2

Avete gestori touch-eventi implementati nel codice tua di MyViewController?

Sembra che il tuo UIButton riceva solo i contattiBegan evento e l'evento viene annullato da qualcosa prima dello che potrebbe ricevere tocchi Fine.

Qualcosa di simile UIScrollView di solito fa quando è decidere tra tocco che deve essere trasmessa alla è subviews e una resistenza che dovrebbe essere gestita da sé.

+1

Ho lottato con lo stesso problema, e questa era la soluzione. Nel mio caso, ho avuto un UITapGestureRecognizer sulla vista genitore che sembrava essere mucking con la gestione touchUp. – alalonde

0

Lol beh questa era una soluzione stupida, ma nello xib l'avevo collegata a buttonTouchUp all'esterno e questo stava causando il problema. Forse questo aiuterà :)

15

Mi dispiace per essere in ritardo ma ho esattamente lo stesso problema. Nel mio caso era un UITapGestureRecognizer assegnato alla vista genitore. Quindi, è una buona idea controllare anche i riconoscitori.

+4

Eccellente, questo è il modo giusto. Ho controllato le proprietà di gestureRecognizer e ho scoperto che si tratta di una "cancelsTouchesInView" che per impostazione predefinita è impostata su SÌ, modificata su NO e questo risolve il mio problema. –

+0

Grazie! Un sintomo interessante è stato che se tenevo premuto il pulsante per alcuni secondi, l'evento TouchUp è stato attivato. Deve essere stato che il TapGestureRecogniser si è arreso e poi ha attivato l'evento. –