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

时间:2011-10-18 19:20:50

标签: iphone objective-c cocoa-touch uiviewcontroller

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

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

[self presentModalViewController:viewB animated:YES];

用户更新后,NSUserDefaults viewB将被解除,因此会再次显示viewA。在显示viewA之前,我希望能够刷新数据。有没有办法做到这一点?

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

通过delegation

ViewAController应该实现ViewBController提供的protocol

@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,其中CheckTableControllerViewBControllerShowFavoritesTableController ViewAController

答案 2 :(得分:0)

您可以使用presentingViewController / parentViewController(阅读这些文档)。但更好的全面解决方案是使“父”成为模态控制器的委托,并让父实现委托符合的协议。

更好的解决方案是使用块中的返回代码来呈现模态控制器,但是您必须为此推出自己的解决方案,因为Apple还没有给我们一个。

答案 3 :(得分:0)

如果viewAcontroller是viewBcontroller的委托,我猜你在viewA的方法中解除了modalViewController或viewB。 在同样的方法中,您只需要实现所需的表重载数据,这将在再次显示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

并在ViewAController.m中:

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

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