我有一个应用程序,其中我正在使用像facebook app.its基本上是UITableViewController
的sidemenu控制器。当我在视图中使用[self.tableView reloaddata]
时,它将首次出现methode很好。因为有些要求我需要从另一个视图控制器重新加载这个表视图。所以我这样做了:
SideMenuViewController *second = [[SideMenuViewController alloc]init];
[second viewWillappear:YES]
我正在重新加载数据。但是当我这样做时,reloaddata不会调用tableviewcontroller的cellforindexmethode但是它调用了numberOfRowsInSection方法。任何人都可以帮我找到我错的地方。
答案 0 :(得分:3)
您可以使用通知。
在SideMenuViewController viewDidLoad方法中添加一个:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reloadTable)
name:@"SideMenuShouldRefreshDataNotification"
object:nil];
reloadTable方法如下所示:
-(void)reloadTable {
dispatch_async(dispatch_get_main_queue(),^{
[self.tableView reloadData];
});
}
如果您想刷新表格,只需在应用中的任意位置发布此通知即可。
[[NSNotificationCenter defaultCenter] postNotificationName:[NSNotification notificationWithName:@"SideMenuShouldRefreshDataNotification" object:nil]];
答案 1 :(得分:0)
请尝试这样做并检查以下内容:
[[self yourtableviewname] reloadData];
答案 2 :(得分:0)
如果您创建一个新实例并在其上调用方法,则不会导致您的旧实例刷新。在现有refreshData
实例上调用TableView
,而不是创建新实例。
答案 3 :(得分:0)
使用协议委托重新加载。 另一个视图控制器可能无法以您使用的方式调用viewWillAppear。 通过编写一个委托重新加载tableview,该委托将返回到其中包含tableview的控制器。
希望它有所帮助。
答案 4 :(得分:0)
此代码永远不会重新加载tableView:
SideMenuViewController *second = [[SideMenuViewController alloc]init];
[second viewWillappear:YES]
因为在这里您要创建SideMenuViewController
类的新实例。如果调用reloadData,它将不会刷新上一个tableView实例。
强行调用viewWillappear
委托方法是一种坏习惯。
<强>解决方案:强>
在viewController的@interface中声明SideMenuViewController
的实例并为其写入属性。
当您转到该视图时,请设置SideViewController
实例。
当用户按下后退按钮时:
[sideViewControllerObject.tablView reloadData];