在2个子视图控制器之间来回传递数据

时间:2012-09-14 01:23:33

标签: ios ipad ios5

想知道是否有人可以就如何解决我目前面临的 iPad 应用程序问题提供一些建议/指示。这是我在下面描述的图形的链接 http://www.yogile.com/dsruyzk7/41m/share/?vt=QANtu4j

基本上我有一个包含2个子视图控制器的parentViewController。子1有一个UITableView和 Child 2有一个自定义UIView。我能够将来自Child 1上的UITableview的信息从didSelectRowAtIndexPath加载到Child 2上的自定义UIView。数据之后 显示在Child 2上我做了一些处理。处理完成后,我需要更新Child 1上的UITableView,以便更新/更新数据 显示在UITableView上。我尝试在Child 1上创建一个委托,但是没有工作,也许我设置错了。所以任何帮助建议都将不胜感激。

由于

Child 2 ViewController上的

.h

@class Child2ViewController;

@protocol child2Delegate <NSObject>
- (void)refreshTable:(Child2ViewController*)controller passedDict:(NSDictionary *)dict;

@interface Child2ViewController:UIViewController<UITableViewDataSource, UITableViewDelegate> {
    UITableView *myTableView;
    id<child2Delegate> delegate;
    Child1ViewController *child1VC;
}

@property (nonatomic, weak) id<child2Delegate> delegate;
…
…

@end
Child 2 ViewController上的

.m

@synthesize delegate;
…
..
..
#after all the processing is done we are ready to refresh the view
#updatedDictForTableView is basically a NSDictionary and has the updated data needed
#for the UITableview on child1VC.

-(void)processData {
    child1VC.delegate = self
    NSLog(@"Dump the updated Data : %@", updatedDictForTableView);
    [delegate refreshTable:self passedDict:updatedDictForTableView;
}
Child1 ViewController中的

.h

@interface Child1ViewController : UIViewController <child2Delegate> {
    ….
    ….
    ..
}
Child1 ViewController中的

.m

- (void)refreshTable:(Child2ViewController*)controller passedDict:(NSDictionary *)dict {
    NSLog(@"dump dict %@", dict);
    [myTableView reloadData];

}

2 个答案:

答案 0 :(得分:1)

您可以通过向子类添加父表视图属性来实现这一点(这里它将被视为详细视图或DetailViewController)

@interface DetailViewController : UIViewController {
...
UITableView *parentTableView;
...
}
@property (nonatomic, retain) UITableView* parentTableView;

然后你在孩子1的某个地方设置了那个属性,然后在孩子2上显示一些东西,也许就像在viewWillAppear中一样:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.detailViewController.parentTableView = self.tableView;
}

然后你们都准备在子2表视图中重新加载子1 tableview ...

答案 1 :(得分:1)

您可以在没有委托的情况下执行此操作,使用NSNotificationcenter在nsdictionary中发送包含您的值的通知:exple:

  // in child1 ( in viewDiDLoad function )
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(FunctionToReloadData:) name:@"ProcessDone" object:nil];

  // remove the listnerin child1 ( in viDidUnload )
[[NSNotificationCenter defaultCenter] removeObserver:self forKeyPath:@"ProcessDone"];

 //in child2 ( in the end of your processData function )
 [[NSNotificationCenter defaultCenter] postNotificationName:@"ProcessDone" object:nil userInfo:updatedDictForTableView ];


 //in child1
 -(void) FunctionToReloadData:(NSNotification *)notification
 {
    // get the sended dictionary
    NSDictionary *tmpDic = [notification userInfo];
     .
     .
     [tableView reloadData];

 }