6

Ho creato un menu simile a quello di sideview per l'iPhone per il quale ho utilizzato il concetto di nave container per l'aggiunta di controller di visualizzazione figlio nel controller di visualizzazione padre. Quando l'utente tocca il pulsante del menu sulla barra di navigazione, modifico semplicemente il frame del controller della vista figlio per animarlo come un menu rivelatore in modo che il controller della vista figlio venga ritagliato a metà del suo frame a destra.Come rilevare l'evento di tocco nel controllore di vista figlio in ios

Ora il mio problema è ogni volta utente tocca qualsiasi parte del controller della vista bambino voglio solo avvisare il suo controllore vista padre quel tocco evento ha sparato sul suo controller della vista bambino in modo che controller della vista genitore può ripristinare la cornice di vista del bambino controller per animarlo come chiudere il menu mezzo rivelato.

Ho usato tap gesture e l'ho aggiunto a ogni visualizzazione figlio delle sottoview dei controller di visualizzazione figlio. quindi tocca il gesto su una qualsiasi delle sottoview notificherà il controller della vista genitore sull'evento touch.

L'evento di tocco funziona correttamente per la vista principale del controller di visualizzazione figlio ma qualsiasi tocco su qualsiasi pulsante non riconosce l'evento TAP.

Non so dove sto sbagliando. per favore aiutami a notificare il controller di visualizzazione genitore su eventuali tocchi nel suo controller di visualizzazione figlio. Grazie in anticipo.

+0

è possibile utilizzare stessa libreria open source per drower? Ho usato RESideMenu. Ha qualche effetto interessante e ha tutte le funzionalità di manipolazione dei rubinetti. –

+0

No, ho avuto un'opzione ma non voglio usare alcuna libreria di terze parti :) I pulsanti –

+0

annulleranno l'evento tap ... disabilita l'userenteraction quando half closed – amar

risposta

7

Non si dovrebbe fare questo

"gesto di rubinetto ho usato e sono stati aggiunti al ogni vista bambino dei controllori Bambini subviews"

si dovrebbe fare aggiungere una visualizzazione overlay sulla parte superiore della vista del controllore parentview dopo aver aperto il menu. quindi rimarrà in cima alle viste sinistra e destra.

si dovrebbe aggiungere tocco riconoscitore su di esso per distruggere/nascondere la vista di sovrapposizione e fare menu Nascondi animazione lì. Vedere il codice seguente

-(void)afterMenuOpened{ 

    UIViewController *parentViewController = yourParentViewController; 

    UIView *aOverLayView = [[UIView alloc]initWithFrame:parentViewController.view.bounds]; 

    aOverLayView.backgroundColor = [UIColor clearColor]; 

    UITapGestureRecognizer *tapRecog = [[UITapGestureRecognizer alloc] initWithTarget:parentViewController action:@selector(OverLayDidTap:)]; 

    tapRecog.numberOfTapsRequired = 1; 

    [aOverLayView addGestureRecognizer:tapRecog]; 

    [parentViewController.view addSubview:aOverLayView]; 


} 

- (void)OverLayDidTap:(UITapGestureRecognizer*)sender { 
// sender.view.hidden = YES; 
    NSLog(@"Hide Menu by resetting the menu frame"); 
} 
+0

Grazie mille Fratello !! Funziona :) –

+0

Siete i benvenuti :) –

1

Penso che potresti aver dimenticato di impostare la proprietà userInteractionEnabled dei tuoi pulsanti su YES che li interrompe ricevendo eventi.

Per quanto riguarda il passaggio degli eventi sull'altro controller di visualizzazione, è consigliabile creare un protocollo delegato che il controller di visualizzazione figlio può utilizzare per inviare i messaggi al controllore della vista principale.

+0

** userInteractionEnabled ** è già impostato !! –

0

Se mancano gli eventi tocco per i pulsanti nelle sottoview, provare ad aggiungere un obiettivo per il pulsante.

[button addTarget:<#(id)#> action:<#(SEL)#> forControlEvents:UIControlEventTouchUpInside]; 

Per notificare parentViewcontroller Registrare la notifica dalla funzione di selezione in childViewController.

[[NSNotificationCenter defaultCenter] postNotificationName:@"notificaiton_name" object:object_you_want_to_send]; 

E nel tuo genitore View Controller add osservatore per la NSNotificationCenter

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(method_you_want_to_call:) name:@"notificaiton_name" object:nil]; 
Problemi correlati