Контроллеры делегирования и модального представления - PullRequest
1 голос
/ 12 октября 2010

Согласно Руководству по программированию View Controller, делегирование является предпочтительным способом отклонения модального представления.

Следуя собственному примеру Apple Recipe, я реализовал следующее, но продолжаю получать предупреждения, что метод 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];
    }



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

Спасибо

1 Ответ

4 голосов
/ 12 октября 2010

Вы не указали, что свойство 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
...