0

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

[tableView1 reloadData]; 

我不想将重新加载放在 viewDidAppear 或 viewWillAppear 方法中,因为当我不需要重新加载 tableView 时(即当用户单击后退按钮返回到 tableView 时)会调用它们。

有没有办法做到这一点?

4

6 回答 6

2

尝试

1)编写一种方法,reloads其中table data.

button2)点击背面调用它。

于 2013-03-04T05:33:24.093 回答
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
}
于 2013-03-04T05:57:54.310 回答
1

您可以使用委托。如果发现它更难,那么替代方法是使用NSNotificationCenter. 您可以看到Refreshing TableView接受的答案。这确实是一种非常简短、简单易懂的方式。

于 2013-03-04T05:55:53.553 回答
0

尝试使用这个

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

  - (IBAction)reloadData:(id)sender
    {
         [tblView reloadData];
    }
于 2013-03-04T05:52:08.733 回答
0

使用如下通知方法:-

NSNotificationCenter在 yourViewController 的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"这是特定通知的关键

于 2013-03-04T05:52:48.617 回答
-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.
于 2013-03-04T06:01:16.257 回答