2

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

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

谢谢

.h 在子 2 视图控制器上

@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

.m 在子 2 视图控制器上

@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];

}
4

2 回答 2

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];

 }
于 2012-09-16T20:20:08.170 回答
1

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

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

然后在子 2 上显示某些内容之前,在子 1 中的某个位置设置该属性,可能就像在 viewWillAppear 中一样:

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

然后,您就可以在子 2 表视图中重新加载子 1 表视图...

于 2012-09-14T01:58:07.407 回答