我需要在將子視圖從導航堆棧彈出之後更新iPhone上的父視圖。如何設置父視圖來通知或接收自動方法調用,當孩子從堆棧彈出並且父母變爲可見時?如何在將視圖控制器彈出iPhone上的堆棧後自動調用方法
用戶在用戶完成並彈出視圖後,要在父頁上顯示的子頁上輸入數據。
感謝您的幫助!
我需要在將子視圖從導航堆棧彈出之後更新iPhone上的父視圖。如何設置父視圖來通知或接收自動方法調用,當孩子從堆棧彈出並且父母變爲可見時?如何在將視圖控制器彈出iPhone上的堆棧後自動調用方法
用戶在用戶完成並彈出視圖後,要在父頁上顯示的子頁上輸入數據。
感謝您的幫助!
我剛剛解決了這個自我同樣的問題 - 上面的答案几乎是正確的,他們只是忘記了設置委託。
我有一個根視圖控制器,顯示列表的大小,調用可能會改變列表大小的子視圖控制器,並且必須在返回時更新大小。
當我創建我的父視圖(以下SettingsView),並將其添加爲一個UINavigationController的根視圖,我一定要設置的UINavigationController的委託之前,我顯示視圖 - 這是關鍵部分:
SettingsView *sv = [[SettingsView alloc] initWithNibName:@"SettingsView" bundle:nil];
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:sv];
[nc setDelegate:sv];
在父視圖,實現UINavigationControllerDelegate協議:
@interface SettingsView : UIViewController <UINavigationControllerDelegate>
並提供willShowViewController方法:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
// Your code to update the parent view
}
這是在子視圖關閉之後並在父視圖重新顯示之前調用的。
我也需要做這樣的事情。在的ViewController是擁有我的的UINavigationController,我不得不實施willShowViewController,像這樣:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
}
,每當UINavigationController的更改視圖方法被調用。如果我正確理解你的問題,我認爲這應該做你想做的事。
我認爲這裏有一些困惑。 UIView
不會被推送到UINavigationController
的堆棧並從中彈出。什麼是推動和彈出是UIViewControllers
,它反過來處理一個或(更經常)幾個意見。
幸運的是,UIViewController
有以下方法:
-(void) viewWillAppear:(BOOL)animated;
-(void) viewDidAppear:(BOOL)animated;
-(void) viewWillDisappear:(BOOL)animated;
-(void) viewDidDisappear:(BOOL)animated;
這些被稱爲每當認爲即將(DIS)的出現,或剛剛(DIS)的出現。我使用標籤欄,模式視圖和導航控制器。 (當你實現自定義控制器時,這是一個好主意)。
所以在你的情況下,如果我理解正確,你只需重寫viewWillAppear
:或viewDidAppear
:你所謂的「父母頁面「(這大概是由UIViewController
處理)並且放入代碼來更新頁面的外觀以反映剛輸入的數據。
(如果我沒記錯的話,你必須確保在UINavigationController
得到當第一次顯示它viewWill/DidAppear:
消息,爲了讓這些消息後來被髮送到其子控制器。如果你設置這個了一個模板或在IB中,您可能不必擔心它。)
如果您需要通知一個控制器到另一個控制器,您可以使用here (see 2nd answer)中所述的委派模式。
不幸的是,您所描述的確切任務沒有自動通知(AFAIK)。 爲了滿足您的需求,您可以在viewWillDisappear您的孩子控制器的功能發送消息給代表(即您的父母控制器)。
如果你的孩子控制器有自己的孩子,這很麻煩。在這種情況下,當孩子按下孫子以及孩子彈出時,會調用「viewWillDisappear」。只有在後一種情況下,你想要通知父母。我還沒有找到解決這個問題的方法。 – 2012-05-07 10:38:17
Felixyz答案爲我做了詭計。調用視圖將出現方法會在每次出現視圖時運行代碼。與視圖不同的是,load僅在視圖第一次加載時運行其代碼。因此,如果子視圖改變了父視圖中顯示的信息,那麼父視圖將不會自行更新,然後從包中彈出。但是,如果父母調用視圖將出現,則每次視圖顯示備份時都會運行代碼。
請務必同時調用超級方法。正確的實施應該是這樣的:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"View Appearing");
}
謝謝,有同樣的問題。 – drew010 2012-01-31 06:43:55