2010-01-24 6 views
2

Dans mon application de délégué, je crée un contrôleur de tabulation avec un tas de contrôleurs de vue pour cela, puis un UIViewController distinct que je montre comme vue la plus haute jusqu'à ce que l'utilisateur effectue un certaine action.UIView ne répond pas aux touches après 'removeFromSuperview'

Je recouvre initialement mon contrôleur d'onglet avec le deuxième contrôleur, mais éventuellement, le second contrôleur est ignoré via 'removeFromSuperview'. Cependant, après que cela se produit, la vue du contrôleur d'onglets ne répondra à aucune interaction de prise ou d'interface utilisateur. Mon application n'est pas accrochée car je peux voir le traitement se produire.

Y a-t-il un moyen de faire en sorte que le contrôleur de tabulation devienne le répondeur de facto après le rejet de la vue la plus haute?

Voilà comment je crée d'abord les deux contrôleurs de vue:

{ 
// main navigation controller is a tab bar 
UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
tabBarController.viewControllers = [NSArray arrayWithObjects: controller1, 
            controller2, 
            controller3, nil]; 

// Add the tab bar to the view 
[window addSubview:tabBarController.view]; 


// Creating the 2nd navigation controller - covering up the tab bar 
// temporarily 
UIViewController *viewController = [[MySecondViewController alloc] 
             initWithNibName:@"SomeView" 
             bundle:nil]; 

UINavigationController *navController = [[UINavigationController alloc] 
      initWithRootViewController:viewController]; 

[viewController release]; 

// Configure and show the second navigation controller 
[window addSubview:[navController view]];  

// Make everything visible 
[window makeKeyAndVisible]; 
} 

Comment le plus vue de dessus est rejetée:

@interface MySecondViewController : UIViewController 
{ 
} 
-(void)dismissMe; 
@end 

@implementation MySecondViewController 
-(void)dismissMe 
{ 
    // Here, the this view is getting removed 
    [self.view removeFromSuperview];   
} 
@end 

Je ne veux pas le plus haut sommet en vue de ressembler j'ajoutais un dialogue modal et souhaite que l'écran soit là dès que l'application est lancée.

Répondre

0

Je pense que votre vue tabbar est toujours "2e" dans la liste. Avez-vous essayé d'ajouter:

bringSubviewToFront:

Déplace la sous-vue spécifié à l' devant ses frères et sœurs. - (void) bringSubviewToFront: (vue UIView *) Vue des paramètres La sous-vue à déplacer vers l'avant. Disponibilité * Disponible sur iPhone OS 2.0 et versions ultérieures. Voir aussi * - sendSubviewToBack: Déclaré En UIView.h

Si cela ne fonctionne pas, vous devrez peut-être configurer votre barre d'onglets comme First Responder.

- (BOOL)canBecomeFirstResponder { 
    returnYES; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self becomeFirstResponder]; 
} 
+0

J'ai essayé ceux-ci mais je n'ai pas travaillé; Cependant, cela m'a donné l'idée d'essayer autre chose, qui a été couronnée de succès. J'ai fait la classe UIWindow échanger les vues dans le rejet de ME comme suit: [appDelegate.window exchangeSubviewAtIndex: 0 withSubviewAtIndex: 1]; \t \t \t \t [appDelegate.tabBarController.view GETFirstResponder]; Excepté cela a conduit à un autre problème où les éléments UIButton dans la barre d'état ne répondra pas à activer/désactiver. Poster une question distincte pour cela. –

Questions connexes