2011-10-18 67 views
0

我有一個視圖用於更新一些NSUserDefaults。這些默認設置會影響不同視圖中的表格。我面臨的問題是我希望在視圖再次顯示之前重新加載表中的數據。如何在父視圖中調用方法? (iPhone/Objective-C)

目前我有viewA其中包含該表中,我然後使用以下代碼顯示viewB

​​

一旦用戶已經更新了NSUserDefaults的viewB被駁回,因此再次顯示viewA。在顯示viewA之前,我希望能夠刷新數據。有沒有辦法做到這一點?

+0

[Delegates](http://developer.apple。COM /庫/ IOS /#文檔/可可/概念/ CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html) – Joe

回答

1

在viewA的viewWillAppear調用你刷新代碼。

-(void)viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:animated]; 
    // your refresh code 
} 
0

通過delegation

的ViewAController應該實現一個protocol,該ViewBController提供

@protocol ViewBControllerProtocol 
/* 
use full signatures here 
*/ 
@end 


@interface ViewBController{ 
} 
@property (nonatomic, assign) id<ViewBControllerProtocol> delegate; 
@end; 


@interface ViewAController <ViewBControllerProtocol>{ 
} 
@end; 

@implemantation ViewAController 

// implement the method defined in the protocol 
@end 

然後你做

viewB.delegate = viewA 

你會發現一個sample code at github,其中CheckTableControllerViewBController and ShowFavoritesTableControllerViewAController

0

您可以使用presentingViewController/parentViewController(閱讀這些文檔)。但更好的全面解決方案是將「父」作爲模態控制器的代表,並讓父代實現委託人遵守的協議。

一個更好的解決方案是將模塊控制器的代碼以塊的形式呈現出來,但是您必須爲此推出自己的解決方案,因爲Apple尚未給出我們的解決方案。

0

我猜你駁回modalViewController或viewB在viewA的方法,如果viewAcontroller是你viewBcontroller委託。 在這個相同的方法中,你只需要實現你需要的表重載數據,這將在再次顯示viewA之前完成。

我有這樣的代碼:

@protocol ViewBControllerDelegate <NSObject> 
    -(IBAction)closeViewBController; 

    @end 
在viewBcontroller.m

-(IBAction)closeView{ 


    [[self parentViewController] performSelector:@selector(closeViewBController)]; 

    } 

在viewAcontroller.h:

在viewBcontroller.h

界面前

@interface viewAcontroller : UIViewController <ViewBControllerDelegate> 
    {//....implementation here 

和i n ViewAController.m:

-(IBAction)closeViewBController{ 
    [self dismissModalViewControllerAnimated:YES]; 
    //code needed if NSUserDefault is modified 
    } 

這是很容易寫的。希望這會回答你的問題