Передача значения родительскому контроллеру при отклонении контроллера - PullRequest
4 голосов
/ 07 июля 2011

Я хочу отправить данные на parentviewcontroller, но следующий код дает сбой.Дайте мне решение

Post *vc;
vc.abc =@"Comment Conttroller";
[self.parentViewController dismissModalViewControllerAnimated:YES];

Здесь Post - это имя контроллера, откуда я вызываю метод presentViewController:animated:completion.

Ответы [ 3 ]

21 голосов
/ 22 февраля 2012

Поместите это в ваш родительский контроллер в viewDidLoad

// get register to fetch notification  
[[NSNotificationCenter defaultCenter] addObserver:self
                                      selector:@selector(yourNotificationHandler:)
                                      name:@"MODELVIEW DISMISS" object:nil];
// --> Now create method in parent class as;
// Now create yourNotificationHandler: like this in parent class
-(void)yourNotificationHandler:(NSNotification *)notice{
    NSString *str = [notice object];
}

Поместите следующее в ваш дочерний класс, где

-(void)dissmissModelView{

    [self dismissModalViewControllerAnimated:YES];
    NSLog(@"DismissModalviewController");

    //raise notification about dismiss 
    [[NSNotificationCenter defaultCenter] 
          postNotificationName:@"MODELVIEW DISMISS" 
                        object:@"Whatever you want to send to parent class"];  
}

, как только представление модели будет отклонено yourNotificationHandler выполняется, и все, что вы передадите как объект, получит выборку в вашем родительском классе.Пожалуйста, спросите, если вам все еще нужны некоторые разъяснения.

1 голос
/ 07 июля 2011

Возьмите это в .h файл в ParentViewController

NSString *strABC;

Сделайте ниже функцию в ParentViewController

-(void)setString:(NSString *)strEntered{
    strABC=strEntered;
}

Сейчас в представлении сообщенияконтроллер делает так:

ParentViewController *objSecond = 
  [[ParentViewController] initwithNibName:@"parentView.xib" bundle:nil];

[objSecond setString:@"Comment Controller"];
[self.navigationController pushViewController:objSecond animated:YES];
[objSecond release];

Теперь, в методе secondViewController viewWillAppear, напишите это.

-(void)viewWillAppear:(BOOL)animated{
      lblUserInput.text = strABC;
}

Пожалуйста, проверьте орфографические ошибки, как я написал от рукиэтот.Надеюсь, что эта помощь.

Если вы не используете UINavigationContoller, вы можете сделать что-то вроде этого.

SecondViewControler *objSecond = 
  [[SecondViewController] initwithNibName:@"secondview.xib" bundle:nil];
[objSecond setUserInput:txtUserInput.text];
[objSecond viewWillAppear:YES];
[self.view addSubview:objSecond];
[objSecond release];
0 голосов
/ 07 июля 2011

vc не инициализируется.

Вы, вероятно, можете сделать это,

vc = (Post *)self.parentViewController;
vc.abc = @"Comment Conttroller";
[vc dismissModalViewControllerAnimated:YES];

Поскольку контроллер представления, на который вы хотите повлиять, это parentViewController, вы должны иметь возможность привести и установить свойство abc.

...