1

В соответствии с руководством по программированию контроллера просмотра делегирование является предпочтительным методом отклонения модального представления.Контроллеры делегирования и модульного просмотра

После собственного примера Рецепта от Apple, я реализовал следующий, но продолжаю получать предупреждения о том, что метод addNameController:didAddName не найден ...

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]; 
    } 



Я думаю, что все необходимые элементы есть и в нужном месте?

Благодаря

ответ

4

Вы не указали, что delegate свойство AddName должен соответствовать протоколу NameDelegate.

Используйте этот код в 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

Спасибо ... Я должен был добавить @class AddName к NameDelegate а :) – joec

Смежные вопросы