调用[tableView reloadData];在一个来自modalViewController的viewController上

时间:2013-03-04 05:29:26

标签: iphone ios objective-c

我有一个modalViewController,它通过tableView出现在viewController的顶部。当用户单击modalViewController上的按钮时,我想在viewController中重新加载tableView:

[tableView1 reloadData]; 

当我不需要tableView重新加载时(例如,当用户单击后退按钮返回tableView时),我不想将重载加载到viewDidAppear或viewWillAppear方法中。

有办法做到这一点吗?

6 个答案:

答案 0 :(得分:2)

尝试

1)编写一个reloads table data

的方法

2)点击后面button调用它。

答案 1 :(得分:2)

这是经典的委托模式问题,在你的模态视图控制器中,你需要一个代表引用当前视图控制器来呈现它

//Modal
@protocol ModalVCDelegate
- (void)tappedBackButton;
@end

@class ModalVC: UIViewController
@property id<ModalVCDelegate> delegate;
@end

@implementation
- (void)backButtonTapped:(id)sender
{
    if (self.delegate) 
        [self.delegate tappedBackButton];
}
@end

现在,在您的演示VC中,只需处理此委托消息

//Parent VC
- (void)showModal
{
    ModalVC *vc = [ModalVC new]; 
    vc.delegate = self;
    //push
}

- (void)tappedBackButton
{
    [self.tableView reloadData];
    //close modal
}

答案 2 :(得分:1)

您可以使用委托。如果发现它更难,那么替代方法是使用NSNotificationCenter。您可以看到Refreshing TableView的已接受答案。这真的是非常简短,容易理解的方式。

答案 3 :(得分:0)

尝试使用此

创建一个按钮并单击此按钮,然后您可以重新加载数据。 此按钮可自定义并在背景上使用。

  - (IBAction)reloadData:(id)sender
    {
         [tblView reloadData];
    }

答案 4 :(得分:0)

使用通知如下方法: -

在yourViewController的NSNotificationCenter Mehod

中创建ViewdidLoad
- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(ReloadDataFunction:)
                                                     name:@"refresh"
                                                   object:nil];

  [super viewDidLoad];

}
-(void)ReloadDataFunction:(NSNotification *)notification {

    [yourTableView reloadData];

}

现在您可以从您的modelViewController BackButton调用此通知,或者您想要调用此Refresh通知,例如放置以下代码行: -

[[NSNotificationCenter defaultCenter] postNotificationName:@"refresh" object:self];

注意: postNotificationName:@"refresh"这是特定通知的关键

答案 5 :(得分:-2)

You can use NSNotification to refresh table on ViewController.

Inside viewController :

-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}

Write code in viewDidLoad:
[[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(reloadMainTable:) 
        name:@"ReloadTable"
        object:nil];




- (void) reloadMainTable:(NSNotification *) notification
{
  [tableView reload];
}


Inside ModelViewController:
[[NSNotificationCenter defaultCenter] 
        postNotificationName:@"ReloadTable" 
        object:nil];

Here you can also send custom object instead of nil parameter. But be care full about removal of NSNotification observer.