2012-01-02 1 views
1

Я пытаюсь реализовать делегат, чтобы модальное представление передавало данные обратно в UIViewController.Реализация делегата для включения модального представления для передачи данных обратно в UIViewController

У меня есть два контроллера вида, мой основной UIViewController и модальный. Используя приведенный ниже код, [delegate translationTextEntered: @ "Test"]; не влияет на главный экран (т.е. «translationTextEntered» никогда не вызывается)

Мой Главный контроллер

Это содержит метод, который будет вызываться, когда модальное имеет значение пользователя:

MainViewController. ч

- (void)translationTextEntered:(NSString *)txt; 

MainViewController.m

- (void)translationTextEntered:(NSString *)text 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
    _text.text = [NSString stringWithFormat:@"%@" , text]; 
} 

Мои модальный контроллер

Это содержит UITableView, который содержит делегат и, когда выбран элемент должен вызывать делегат обратного вызова.

SuggestionViewController.h

@protocol SelectTranslationDelegate <NSObject> 
- (void)translationTextEntered:(NSString *)text; 
@end 

@interface SuggestionViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, SelectTranslationDelegate> 
{ 
    id<SelectTranslationDelegate> delegate; 
} 

@property (nonatomic, weak)id delegate; 

SuggestionViewController.h

@synthesize delegate = _delegate; 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ...  
    [delegate translationTextEntered:@"f"]; 

} 
+1

Фактически вы назначаете 'MainViewController' в качестве делегата' SuggestionViewController'? –

+0

Привет, Пол. Не могли бы вы рассказать об этом с примером? Мой модальный UIViewController: Nick

ответ

2

Это должно быть что-то вроде этого:

MainViewController.h

#import "SuggestionViewController.h" 

@interface MainViewController : UIViewController <SelectTranslationDelegate> 

// - (void)translationTextEntered:(NSString *)txt; <- Not required 

Декларация - (void)translationTextEntered:(NSString *)txt; является не требуется, потому что вы говорите, что согласны с протоколом SelectTranslationDelegate (бит между </>)

MainViewController.м

// The method where you instantiate SuggestionViewController 
{ 
    // .. do your work 

    SuggestionViewController *suggestionViewController = [[SuggestionViewController alloc] init]; 

    suggestionViewController.delegate = self; // <- This is the missing line 

    [self presentModalViewController:suggestionViewController animated:YES]; 
    // [suggestionViewController release]; suggestionViewController = nil; // I'm assuming your using ARC 

} 

Следует также отметить, что ваш взгляд модальный контроллер не должен соответствовать SelectTranslationDelegate, так как это, скорее всего, не ваши намерения. Таким образом, вы заявление должно быть как:

@interface SuggestionViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 

Это MainViewController, что вы хотите, чтобы ответить на translationTextEntered: не SuggestionViewController. SuggestionViewController - это тот, который делает сообщение translationTextEntered: на delegate

0

В вашем модальный контроллер представления в viewDidLoad или View WillAppear Включить фразу ...

  1. Создайте объект основного вида controoller ... в виде DidLoad ...

    mainViewController * mainVC = [[mainViewController Alloc] initwithnobname]; ...

  2. Затем установите предложение

    self.delegate = mainVC;

Это вещь, что вам нужно TODO ...

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