2010-09-08 6 views
2

J'ai un petit doute. J'ai une classe NSObject où j'essaie d'afficher une vue d'alerte. Donc, après que la vue d'alerte est affichée lorsque je tape sur le bouton OK, je veux pousser un contrôleur de navigation sur la pile. Est-ce que je peux pousser un contrôleur de navigation de la classe NSObject générale? S'il vous plaît laissez-moi savoir guys..thanks pour votre temps ..UIAlertView Question

Ce code ..

- (void) alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex{  
    SettingsViewController *homeView = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil]; 
    [self.navigationController pushViewController:homeView animated:NO]; 
    [homeView release]; 

} 

Je crée une propriété appelée NavigationController de type UINavigationController et quand je prends l'erreur que je suis l'affichage d'une vue d'alerte et j'utilise la méthode ci-dessus pour pousser le contrôleur de vue, mais cela ne fonctionne pas ..

Répondre

3

Oui et non ... selon la façon dont vous avez configuré votre application. Pour pousser les vues sur la pile de navigation, vous devez avoir un contrôleur de navigation . Votre NSObject a-t-il accès à ce contrôleur de navigation? Vous devrez peut-être configurer une méthode de délégué qui sera appelée à partir de votre vue de délégué lorsque le délégué de la vue d'alerte sera appelé dans votre objet NSObject. Je me demande juste pourquoi vous affichez un UIAlertView dans un NSObject, pourquoi ne l'affichez-vous pas dans un UIView ou un UIViewController?

CustomObject.h

@protocol CustomObjectDelegate<NSObject> 
@optional 
- (void)customObjectAlertViewDidClickOk; 
@end 

@interface CustomObject : NSObject <UIAlertViewDelegate>{ 
    id<CustomObjectDelegate> delegate; 
} 
@property (nonatomic, assign) id<CustomObjectDelegate> delegate; 
@end; 

CustomObject.m

@synthesize delegate; 
// then put this: 
- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
    [delegate customObjectAlertViewDidClickOk]; 
} 

Ensuite, votre fichier .h ViewController doit inclure l'objet personnalisé et attribuer les méthodes de délégué:

#include "CustomObject.h" 
@interface MyViewController : UIViewController <CustomObjectDelegate> { 

} 
@end 

et le .m viewDidLoad (ou similaire):

- (void)viewDidLoad{ 
    CustomObject *obj = [[CustomObject alloc] init]; 
    [obj setDelegate:self]; 
} 
- (void)customObjectAlertViewDidClickOk{ 
    AnotherViewController *page = [[AnotherViewController alloc] initWithNibName:nil bundles:nil]; 
    [self.navigationController pushViewController:page]; 
} 

Voilà comment je le ferais - étant donné que je ne suis pas sûr que je comprends tout à fait ce que vous demandez. :) C'est tout le haut de ma tête aussi - alors ne le prenez pas lettre pour lettre, mais vous avez la base là pour commencer avec. Vous pouvez construire dessus. Rechercher @protocols et déléguer des méthodes, tout est là. :)

+0

merci pour la réponse thomas..J'utilise un service et le service est une classe NSObject..soù chaque fois que je rencontre des erreurs dans le service, j'affiche des vues d'alerte..J'ai utilisé la méthode clickedButtonAtIndex de alertview dans la classe NSObject mais Je ne suis pas sûr de savoir comment pousser le contrôleur de navigation de cette méthode.pouvez-vous s'il vous plaît m'aider à ce sujet .. si possible pouvez-vous s'il vous plaît poster un code exemple .. – racharambola

+0

je ne suis pas sûr de ce que vous voulez dire vraiment. Vous devrez peut-être poster du code vous-même pour que je puisse vous aider. Cependant, je suggère que vous créiez simplement une méthode déléguée que gts appelle dans 'clickedButtonAtIndex'. Je vais mettre à jour mon poste avec un exemple ... –

+0

merci thomas .. Je vais essayer .. J'ai inclus du code .. s'il vous plaît jeter un oeil à si vous avez un peu de temps .. encore une fois merci pour votre temps – racharambola