2014-07-15 44 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

歡迎您:) –

相關問題