2016-02-16 38 views
-2

我有两个视图控制器。第一个有一个表视图,并使用第二个视图控制器,我正在第一个视图控制器上调用一个方法。在该方法中,我试图添加一个项目到对象数组并刷新表视图。如何从另一个视图控制器iOS刷新表视图?

[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

您可以使用本地通知 –

+0

为什么不尝试使用代表? –

+0

我怎样才能使用代表? – codebot

回答

3

添加此上的顶部,你可以使用NSNotificationCenter

消防通知您的第二个视图控制器的接口

@protocol SecondViewControllerDelegate <NSObject> 
- (void)addNewItem:(id)item; 
@end 


@interface SecondViewController : UIViewController 
@property (nonatomic, weak) id <SecondViewControllerDelegate> delegate; 

@end 

从您实例化导航的secondViewController的firstViewController中的要点将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!"]; 
     } 
    }]; 
}); 

添加addNewItem的实施在firstViewController

- (void)addNewItem:(id)item{ 
    [postsArr insertObject:post atIndex:postsArr.count]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.newsTableView reloadData]; 
    }); 
} 
0

有很多方法通过你可以实现你的目标

  1. NSNotification
  2. 代表
  3. KeyValueObserver

但是我发现最可靠的是

@property (copy) void (^valueTypeChangedBlock) (NSarray arrayTypeObject); 

增加这个属性在.h文件中

并在.m文件添加此

self.valueTypeChangedBlock = ^(NSarray NewArr) { 
     postsArr = NewArr 
     [self.newsTableView reloadData]; 
    }; 

在以往任何时候ü要改变从哪个表格视图重新加载 在此处添加新阵列

self.valueTypeChangedBlock (self.NewArray); 
相关问题