调用[tableView reloadData];在 modalViewController 的 viewController 上
Posted
技术标签:
【中文标题】调用[tableView reloadData];在 modalViewController 的 viewController 上【英文标题】:Call [tableView reloadData]; on a viewController from a modalViewController 【发布时间】:2013-03-04 05:29:25 【问题描述】:我有一个 modalViewController,它出现在带有 tableView 的 viewController 的顶部。当用户单击 modalViewController 上的按钮时,我想在 viewController 中重新加载 tableView:
[tableView1 reloadData];
我不想将重新加载放在 viewDidAppear 或 viewWillAppear 方法中,因为当我不需要重新加载 tableView 时(即当用户单击后退按钮返回到 tableView 时)会调用它们。
有没有办法做到这一点?
【问题讨论】:
通过通知或委托。 嗨,Anil,我不确定该怎么做。您有任何入门示例或建议吗? @Brandon 代表。这对你真的很有帮助。 看看这个***.com/questions/6168919/… 是的,请遵循 Anil 链接中给出的步骤。并在您的 ViewController 中使用 reloadData 实现委托方法。 【参考方案1】:试试
1) 编写一个reloads
table data
的方法。
2) 在后面调用button
点击。
【讨论】:
嗨 Girish,我已经建立了方法。我想在用户单击模式视图上的按钮而不是后退按钮时调用它。你知道该怎么做吗? 我相信 Girish 的意思是在 viewcontroller(有你的 tableview)中创建你的 reload 方法并从 modalviewcontroller 调用它 在这种情况下,创建一个在您单击按钮时自动调用的委托。 @JohnRiselvato 你是对的,但如果他不想要这个,那么就像我在之前的评论中提到的那样使用代表。 @JohnRiselvato 我想我只是不知道如何从另一个 viewController 调用方法【参考方案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
【讨论】:
【参考方案3】:您可以使用委托。如果发现它更难,那么替代方法是使用NSNotificationCenter
。您可以看到Refreshing TableView 的已接受答案。这是非常简短、简单易懂的方式。
【讨论】:
【参考方案4】:使用如下通知方法:-
在 yourViewController 的 ViewdidLoad
方法中创建 NSNotificationCenter
- (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】:尝试使用这个
制作一个按钮并单击此按钮,然后您可以重新加载数据。 此按钮可自定义并在背景中使用。
- (IBAction)reloadData:(id)sender
[tblView reloadData];
【讨论】:
【参考方案6】: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.
【讨论】:
你好,谁能告诉我?以上是关于调用[tableView reloadData];在 modalViewController 的 viewController 上的主要内容,如果未能解决你的问题,请参考以下文章
尝试调用 tableView.reloadData 时出现 NSInvalidArgumentException?
iOS - tableView 的 reloadData 不调用 cellForRowAtIndexPath
tableView.reloadData() 不起作用,可能没有在主线程上调用
升级到 iPhone OS 4 后,我的 TableView 在调用 reloadData 后滚动到顶部
调用[tableView reloadData];在 modalViewController 的 viewController 上