2014-07-15 45 views
2

1)我有两个控制器,fistViewController,secondViewController。可以在popViewcontroller之后调用委托方法吗?

2)第一个控制器实现委托说“xyzDelegate”。

@interface FirstViewController : UIViewController <xyzDelegate> 

3)第一视图控制器中的委托方法刷新UIViewTable。

4)第一个控制器:推第二个视图控制器。

SecondviewController *svc = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
svc.delegate = self; 

[self.navigationController pushViewController:svc animated:YES]; 

4)在第二视图控制器:

id<xyzDelegate> strongDelegate = self.delegate; 

[self.navigationController popViewControllerAnimated:YES]; 
NSLog (@"After popViewControler"); 

[strongDelegate dateSelected:dateChoosen]; // Invoking Delegate Method. 

问:

1)它是一般的做法后大跌眼镜视图控制器调用委托方法? 因为我在刷新UITable,一旦在FirstView控制器中调用委托方法。

+0

为什么不选择日期?或者当第一个视图控制器'viewWillAppear:'刷新表格时? – Wain

回答

1

通常,视图控制器是一个独立的屏幕单元。特别是如果它由导航控制器切换。预计您将重新配置视图以将其数据绑定到覆盖viewWillAppear:viewDidAppear:方法之一。

通常优选viewDidAppear:。因为在很多情况下,切换视图需要重新加载底层数据,而这通常会导致异步I/O。在这种情况下,这个异步I/O可能会干扰同时执行视图切换动画。

无论如何,如果您的视图设置操作是轻量级的,那么使用viewWillAppear:会更好,因为它会让您的用户等待更少。

在这种情况下,IMO似乎最好的办法就是刷新目标视图控制器上的数据,并处理刷新视图控制器的方法。

+0

谢谢,完美!! :) – Whoami

2

您应该调用委托方法之前发生POP动作。

[strongDelegate dateSelected:dateChoosen]; 

popViewControllerAnimated将调用第二个视图控制器dealloc方法销毁,在那里你会释放strongDelegate。所以没有更多的strongDelegate来接收dateSelected:方法。

[self.navigationController popViewControllerAnimated:YES]; 
+0

谢谢维杰。翔实。 – Whoami

+0

欢迎您:) –

相关问题