2010-05-16 8 views
1

J'ajoute une vue modale en utilisant le code suivant:Vue modale de l'iPhone avec vue parente semi-visible?

[self presentModalViewController:phrasesEditor animated:YES];

Comment puis-je faire le point de vue modal semi-transparent de sorte que la superview "brille" par?

Ma méthode complète/fonction ressemble à ceci:

-(IBAction)showEditPhrases:(id)sender{ 
    PhrasesViewController *phrasesEditor = [[PhrasesViewController alloc] initWithNibName:@"PhrasesViewController" bundle:nil]; 
    phrasesEditor.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
    [phrasesEditor.view setAlpha: 0.5]; 
    [phrasesEditor.view setBackgroundColor: [UIColor clearColor]]; 
    [self presentModalViewController:phrasesEditor animated:YES]; 
    [phrasesEditor release]; 
} 

EDIT:

L'approche pragmatique de changer l'alpha ne fonctionnera pas, apparemment. Comment puis-je charger un NIB dans un UIView et interagir avec lui?

J'ai maintenant un UIViewController. Est-ce que je le convertis/le modifie/le change en UIVIew et puis le charge, ou suis-je censé faire autre chose?

EDIT 2:

j'ai essayé [self.view addSubview:phrasesEditor.view];, mais qui me laisse aucun moyen de supprimer la sous-vue. Chaque vue semble avoir son propre View Controller.

EDIT 3:

Je pensais que je dois mentionner que le superview est à l'intérieur d'un contrôleur de vue appelé iDecideViewController et le phrasesEditor a un contrôleur de vue séparée.

Répondre

0

Lorsque vous présentez une vue modale, elle va effectivement décharger la vue précédente, ce qui n'est pas du tout ce que vous voulez. UIView a une méthode appelée addSubview qui mettra la nouvelle vue au-dessus de ses frères et soeurs.

Au lieu de:

[self presentModalViewController:phrasesEditor animated:YES]; 

faire:

[self.view addSubview:phrasesEditor.view]; 

Ceci suppose que vous êtes déjà dans une sous-classe ViewController.

+0

J'ai essayé, mais comment puis-je le décharger? – Moshe

+0

removeFromSuperview sur phrasesEditor.view – willcodejavaforfood

+0

Je ne suis pas sûr à ce sujet. Il a un contrôleur de vue distinct de l'éditeur de phrases et provoque EXC_BAD_ACCESS – Moshe

1

J'ai eu le même problème et a ajouté une propriété et 2 méthodes pour une sous-classe de UIViewController pour imiter le comportement de presentModalViewController: animé:

Pour plus d'informations mor, voir mon blog: How to display a transparent modal view controller ou consultez le code ci-dessous :

#pragma mark - Transparent Modal View 
-(void) presentTransparentModalViewController: (UIViewController *) aViewController 
            animated: (BOOL) isAnimated 
            withAlpha: (CGFloat) anAlpha{ 

    self.transparentModalViewController = aViewController; 
    UIView *view = aViewController.view; 

    view.opaque = NO; 
    view.alpha = anAlpha; 
    [view.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
     UIView *each = obj; 
     each.opaque = NO; 
     each.alpha = anAlpha; 
    }]; 

    if (isAnimated) { 
     //Animated 
     CGRect mainrect = [[UIScreen mainScreen] bounds]; 
     CGRect newRect = CGRectMake(0, mainrect.size.height, mainrect.size.width, mainrect.size.height); 


     [self.view addSubview:view]; 
     view.frame = newRect; 

     [UIView animateWithDuration:0.8 
         animations:^{ 
          view.frame = mainrect; 
         } completion:^(BOOL finished) { 
          //nop 
         }]; 

    }else{ 
     view.frame = [[UIScreen mainScreen] bounds]; 
     [self.view addSubview:view]; 
    } 






} 

-(void) dismissTransparentModalViewControllerAnimated:(BOOL) animated{ 

    if (animated) { 
     CGRect mainrect = [[UIScreen mainScreen] bounds]; 
     CGRect newRect = CGRectMake(0, mainrect.size.height, mainrect.size.width, mainrect.size.height); 
     [UIView animateWithDuration:0.8 
         animations:^{ 
          self.transparentModalViewController.view.frame = newRect; 
         } completion:^(BOOL finished) { 
          [self.transparentModalViewController.view removeFromSuperview]; 
          self.transparentModalViewController = nil; 
         }]; 
    } 


} 
Questions connexes