1

Selon le Guide de programmation de View Controller, la délégation est la méthode recommandée pour ignorer une vue modale.Délégation et contrôleurs de vue modale

Suite propre exemple de recette d'Apple, je l'ai mis en œuvre ce qui suit, mais continuez à recevoir des avertissements que la méthode addNameController:didAddName ne trouve ...

NameDelegate.h 
    @protocol NameDelegate 
    - (void)addNameController:(AddName *)addNameController didAddName:(NSString *)name; 
    @end 

AddName.h 
    @interface AddName : UIViewController { 
     UITextField *nameField; 
     id delegate; 
    } 
    - (IBAction)doneAction; 
    - (id)delegate; 
    - (void)setDelegate:(id)newDelegate; 
    @property (nonatomic, retain) IBOutlet UITextField *nameField; 
    @end 

AddName.m 
    - (IBAction)doneAction { 
     [delegate addNameController:self didAddName:[nameField text]]; 
    } 

    - (id)delegate { 
     return delegate; 
    } 

    - (void)setDelegate:(id)newDelegate { 
     delegate = newDelegate; 
    } 

ItemViewController.h 
    #import "NameDelegate.h" 
    @interface ItemViewController : UITableViewController <NameDelegate>{ 
    } 
    @end 

ItemViewController.m 
    - (void)addItem:(id)sender { 

     AddName *addName = [[AddName alloc] init]; 
     addName.delegate = self; 
     [self presentModalViewController:addName animated:YES]; 
    } 

    - (void)addNameController:(AddName *)addNameController didAddName:(NSString *)name { 
     //Do other checks before dismiss... 
     [self dismissModalViewControllerAnimated:YES]; 
    } 



Je pense que tous les éléments requis sont là et au bon endroit?

Merci

Répondre

4

Vous n'avez pas précisé que la propriété delegate de AddName doit se conformer au protocole NameDelegate.

Utilisez ce code dans AddName.h:

#import "NameDelegate.h" 

@interface AddName : UIViewController { 
    UITextField *nameField; 
    id <NameDelegate> delegate; 
} 

@property(nonatomic, retain) IBOutlet UITextField *nameField; 
@property(nonatomic, assign) id <NameDelegate> delegate; 

- (IBAction)doneAction; 

@end 
+0

Merci ... Je devais ajouter @class addname au NameDelegate ainsi :) – joec

Questions connexes