2013-06-26 3 views
1

У меня 2 viewcontrollers с SEGUE «страницы завиток»как обновить viewdidload для родительского ViewController

viewcontrollerA => pagecurl => viewcontrollerB и теперь я хочу, чтобы обновить viewcontrollerA поскольку пользователь внести некоторые изменения в viewcontrollerB.

I судимый:

UIStoryboard* sb = [UIStoryboard storyboardWithName:@"mystoryboard" 
              bundle:nil]; 
UIViewController* vc = [sb instantiateViewControllerWithIdentifier:@"ExampleViewController"]; 
[vc ViewDidLoad]; // or ViewWillAppear or ViewDidApear 

это работает только для NSLog я помещал в этих функциях. , но ни один из них не работает с функцией, которая проверяет Coredata и обновляет интерфейс. , пожалуйста, помогите

ответ

0

ViewWillApear или ViewDidApear будет называться, так как есть какое-либо изменение объекта в ViewController, но если вы хотите изменить свой viewcontrollerA от другого viewcontrollerB, которые требуют NSNotificationCenter для вызова функции из viewcontrollerA

вы всегда можете использовать NSNotificationCenter обновить родительский ViewController

на родителя ViewController поставить это:

//since child view controller calls turnItOff, notification center calls function "turnButtonCountinuesOff" 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(turnButtonCountinuesOff) name:@"turnItOff" object:nil]; 

turnButtonCountinuesOff ваша функция в Paren т ViewController

На ваш ребенок ViewController поставить это:

//connect to parent UI view controller calls notification turnItOff. 
[[NSNotificationCenter defaultCenter] postNotificationName:@"turnItOff" object:nil]; 

надеюсь, что это помогает.

0

Вы можете отправить NSNotification, которое родитель получит, или вы можете установить делегат с помощью метода, реализуемого родительским представлением.

В обоих случаях просто перезагрузите представление.

2

попробуйте этот код:

добавить класс родительского класса

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(actionremovecalender:) 
               name:@"subMitReport" 
               object:nil]; 
-(void)actionremovecalender:(NSNotification *)notification 
{ 
    [self ViewDidLoad] 
} 

вызова ребенка

[[NSNotificationCenter defaultCenter]postNotificationName:@"subMitReport" object:nil] 
+0

:) спасибо за рассказ – vegligi

0

В отношении один к одному, то следует предпочесть шаблон делегирования. Просто добавьте слабую ссылку viewcontrollerA на ваш viewcontrollerB. Вы можете просто вызвать метод (в данном случае метод viewDidLoad) viewcontrollerA с использованием ссылки, чтобы вы могли обновлять представления. Но я бы предпочел объявить протокол для делегирования для предотвращения жесткой связи двух контроллеров представления.