我有一個視圖用於更新一些NSUserDefaults。這些默認設置會影響不同視圖中的表格。我面臨的問題是我希望在視圖再次顯示之前重新加載表中的數據。如何在父視圖中調用方法? (iPhone/Objective-C)
目前我有viewA
其中包含該表中,我然後使用以下代碼顯示viewB
:
一旦用戶已經更新了NSUserDefaults的viewB
被駁回,因此再次顯示viewA
。在顯示viewA
之前,我希望能夠刷新數據。有沒有辦法做到這一點?
我有一個視圖用於更新一些NSUserDefaults。這些默認設置會影響不同視圖中的表格。我面臨的問題是我希望在視圖再次顯示之前重新加載表中的數據。如何在父視圖中調用方法? (iPhone/Objective-C)
目前我有viewA
其中包含該表中,我然後使用以下代碼顯示viewB
:
一旦用戶已經更新了NSUserDefaults的viewB
被駁回,因此再次顯示viewA
。在顯示viewA
之前,我希望能夠刷新數據。有沒有辦法做到這一點?
在viewA的viewWillAppear調用你刷新代碼。
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
// your refresh code
}
通過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,其中CheckTableController
會ViewBController
and ShowFavoritesTableController
ViewAController
。
您可以使用presentingViewController
/parentViewController
(閱讀這些文檔)。但更好的全面解決方案是將「父」作爲模態控制器的代表,並讓父代實現委託人遵守的協議。
一個更好的解決方案是將模塊控制器的代碼以塊的形式呈現出來,但是您必須爲此推出自己的解決方案,因爲Apple尚未給出我們的解決方案。
我猜你駁回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
}
這是很容易寫的。希望這會回答你的問題
[Delegates](http://developer.apple。COM /庫/ IOS /#文檔/可可/概念/ CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html) – Joe