我有两个视图控制器。第一个有一个表视图,并使用第二个视图控制器我在第一个视图控制器上调用一个方法。在那个方法中,我正在尝试将一个项添加到objects数组并刷新表视图。
[postsArr insertObject:post atIndex:postsArr.count];
dispatch_async(dispatch_get_main_queue(), ^{
[self.newsTableView reloadData];
});
我在第二个视图控制器中调用此方法,
dispatch_async(dispatch_get_main_queue(), ^{
[self.navigationController popViewControllerAnimated:YES];
[self.appContext.creator createWithText:userText completion:^(UserData *userData,NSError *error) {
if (error == nil){
if (userData != nil) {
[self.parent addNew:((UserData*)[userData.list objectAtIndex:0]) withImage:nil];
}
}else{
[self showAlertWith:@"Error" with:@"Error occurred!"];
}
}];
});
如何从其他视图控制器刷新表格视图?
答案 0 :(得分:3)
将其添加到第二个viewcontroller
的界面顶部@protocol SecondViewControllerDelegate <NSObject>
- (void)addNewItem:(id)item;
@end
@interface SecondViewController : UIViewController
@property (nonatomic, weak) id <SecondViewControllerDelegate> delegate;
@end
firstViewController中您实例化第二个ViewController以进行导航的位置将secondviewController.delegate添加为self。
self.secondViewController.delegate = self;
从你在secondViewController中获得响应并且你想在firstViewController调用委托方法中添加addItem,并将该项传递给该委托方法中的firstViewController。
dispatch_async(dispatch_get_main_queue(), ^{
[self.navigationController popViewControllerAnimated:YES];
[self.appContext.creator createWithText:userText completion:^(UserData *userData,NSError *error) {
if (error == nil){
if (userData != nil) {
[self.delegate addNewItem:((UserData*)[userData.list objectAtIndex:0]) withImage:nil];
}
}else{
[self showAlertWith:@"Error" with:@"Error occurred!"];
}
}];
});
在firstViewController中添加addNewItem的实现
- (void)addNewItem:(id)item{
[postsArr insertObject:post atIndex:postsArr.count];
dispatch_async(dispatch_get_main_queue(), ^{
[self.newsTableView reloadData];
});
}
答案 1 :(得分:1)
您可以使用NSNotificationCenter
需要重新加载表时的火警通知
只需点击链接即可了解实施通知
Send and receive messages through NSNotificationCenter in Objective-C?
答案 2 :(得分:0)
您可以通过许多方法实现目标
但我发现最可靠的是
@property (copy) void (^valueTypeChangedBlock) (NSarray arrayTypeObject);
在.h文件中添加此属性
并在.m文件中添加此
self.valueTypeChangedBlock = ^(NSarray NewArr) {
postsArr = NewArr
[self.newsTableView reloadData];
};
在哪里你想要更改表视图重新加载的数组 在这里添加新数组
self.valueTypeChangedBlock (self.NewArray);