如何在父视图中调用方法?(iPhone / objective - c)



我有一个用于更新一些NSUserDefaults的视图。这些默认值对不同视图中的表有影响。我面临的问题是,我想在再次显示视图之前重新加载表中的数据。

目前我有包含表的viewA,然后我使用以下代码显示viewB:

[self presentModalViewController:viewB animated:YES];

一旦用户更新了NSUserDefaults, viewB被驳回,因此再次显示viewA。在viewA显示之前,我希望能够刷新数据。有什么办法可以做到吗?

在viewA的viewWillAppear调用你的刷新代码。

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

通过委托:

viewcontroller应该实现一个协议,该协议是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

您可以在github上找到示例代码,其中CheckTableController将是ViewBControllerShowFavoritesTableController ViewAController

您可以使用presentingViewController/parentViewController(请阅读相关文档)。但一个更好的全面解决方案是让"父"成为你的模态控制器的委托,并让父实现委托遵循的协议。

一个更好的解决方案是在块中呈现带有返回代码的模态控制器,但你必须提出自己的解决方案,因为苹果还没有给我们一个。

我猜你在viewA的方法中解散了modalViewController或viewB,如果viewcontroller是你的viewBcontroller的委托。在相同的方法中,您只需要实现所需的表重载数据,并且这将在再次显示viewA之前完成。

我有这样的代码:

在viewBcontroller.h中

    @protocol ViewBControllerDelegate <NSObject>
   -(IBAction)closeViewBController;
    @end
在viewBcontroller.m:

    -(IBAction)closeView{

    [[self parentViewController] performSelector:@selector(closeViewBController)];
    }
在viewAcontroller.h:

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

和在viewcontroller .m:

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

很容易写。希望这能回答你的问题

最新更新