如何从另一个视图控制器iOS刷新表视图?

时间:2016-02-16 10:30:02

标签: ios objective-c

我有两个视图控制器。第一个有一个表视图,并使用第二个视图控制器我在第一个视图控制器上调用一个方法。在那个方法中,我正在尝试将一个项添加到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!"];
        }
    }];
});

如何从其他视图控制器刷新表格视图?

3 个答案:

答案 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)

您可以通过许多方法实现目标

  1. NSNotification
  2. 代表
  3. KeyValueObserver
  4. 但我发现最可靠的是

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

    在.h文件中添加此属性

    并在.m文件中添加此

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

    在哪里你想要更改表视图重新加载的数组 在这里添加新数组

    self.valueTypeChangedBlock (self.NewArray);