2011-10-29 3 views
2

J'ai un ViewController avec un UIImageView en plein écran. J'ai caché statusBar et NavigationBar, donc il n'y a aucun moyen de revenir en arrière mais en tapant quelque part.touchesBegan pour rejeter une vue

Alors je pensais à revenir juste en utilisant ce touchesBegan

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{  
    [self dismissModalViewControllerAnimated:YES]; 
} 

J'ai aussi essayé d'utiliser cette façon

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
    [self.navigationController setNavigationBarHidden:YES]; 

    UITapGestureRecognizer *tapRecognizer; 
    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissModalViewControllerAnimated:)]; 
    [imageFrame addGestureRecognizer:tapRecognizer]; 

    imageFrame.image = [UIImage imageWithContentsOfFile:image]; 

    [tapRecognizer release]; 
} 

je m'y suis coincé là-bas, avec cette image plein écran et je peux » t revenir en arrière. Comment est-ce que je peux fermer le viewcontroller?

+0

Quelques idées pour quoi? Vous ne nous avez pas dit quel est le problème. Peut-être toucheBegan pas appelé? Cherchez-vous une meilleure pratique? – LearnCocos2D

+0

Eh bien ... rien ne fonctionne. Je veux dire, je me suis coincé là-bas avec cette image en plein écran et je ne peux pas revenir en arrière. Je vais éditer ma question, désolé. – Oiproks

Répondre

3

Si vous utilisez une barre de navigation, je suppose que vous avez fait un pushViewController pour démarrer ce contrôleur de vue? Dans ce cas, vous voudrez

[self.navigationController popViewControllerAnimated:YES]; 

pour fermer le contrôleur.

+0

Droit! Je ne pouvais pas voir ça. Merci beaucoup. Juste une chose de plus: j'ai caché statusBar et NavigationBar, donc quand j'ouvre cette vue, ils sont cachés aussi dans l'ancienne vue. Est-ce que le fait de les replacer dans 'viewDidAppear' est la seule façon de résoudre ce problème, ou vous pouvez me suggérer quelque chose de mieux? – Oiproks

+0

Je recommanderais de le faire dans viewWillAppear, mais oui, c'est la seule façon que je connaisse de restaurer la visibilité de la barre de navigation. –

0

Bien sûr, votre solution suppose que la vue de l'image est en fait un contrôleur de vue modale présenté avec presentModalViewController:animated: quelque part.

Ma suggestion serait d'avoir un UIButton placé au-dessus de votre vue d'image et de la même taille. Branchez votre Touch Up Inside à votre méthode de retour, puis définissez son alpha à 0 ou Masquez-le via IB ou les propriétés. Le bouton ne sera pas affiché mais il recevra toujours des événements tactiles.

+0

J'ai essayé avec le bouton mais ça ne fonctionnait pas. J'ai résolu avec Alan Moore Solution. Votre solution était intelligente! Je pense que je vais l'utiliser ailleurs. Merci beaucoup. – Oiproks

+0

... Maintenant, je suis curieux, pourquoi avez-vous essayé de rejeter un contrôleur de vue modale si vous n'en avez jamais présenté un? – FeifanZ

+0

J'étais erroné en pensant que j'ai utilisé presentModalViewController: animé! Je travaille depuis ce matin et maintenant c'est presque 1 heure de l'après-midi. ici ... je devrais aller dormir. – Oiproks

0

Vous devez appeler dismissModalViewControllerAnimated: sur le contrôleur de vue parent, et non sur celui que vous voulez cacher.

Assurez-vous également de définir la propriété userInteractionEnabled de UIImageView sur yes car, contrairement aux UIView classiques, elle ne répond pas aux événements tactiles par défaut.

+0

J'ai oublié d'activer le userInteraction sur le UIImageView, mais ce n'était pas le problème principal. Merci quand même. – Oiproks

Questions connexes