想知道是否有人可以就如何解决我目前面临的 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上的@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上的@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中的@interface Child1ViewController : UIViewController <child2Delegate> {
….
….
..
}
Child1 ViewController中的- (void)refreshTable:(Child2ViewController*)controller passedDict:(NSDictionary *)dict {
NSLog(@"dump dict %@", dict);
[myTableView reloadData];
}
答案 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];
}