我有一个RootViewController类和一个UserSettingsController类。我在RootViewController类中定义了UITableView方法(numberOfRowsInSection,cellForRowAtIndexPath)。
我想从UserSettingsController类重新加载RootViewController类中定义的表视图。如何从UserSettingsController类中控制RootViewController类中的tableView对象?
我尝试了以下操作,但它尝试加载一个新的tableview对象。
RootViewController *rootViewController = [[RootViewController alloc]init];
[rootViewController.mytableView reloadData];
[rootViewController autorelease];
答案 0 :(得分:6)
您可以在RootViewController本身的rootViewController.mytableView
方法中重新加载viewWillAppear
。当您要进入rootViewController视图时,这将使rootViewController.mytableView
重新加载。如果您要加载的数据不多(因为加载需要更多时间,比如从Web获取数据),您可以使用此解决方案。
否则,要从您的设置视图中加载rootViewController.mytableView
,您可以像这样使用NSNotification:
在RootViewController.m中:
//This goes in viewDidLoad
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadTableViewData) name:@"ReloadRootViewControllerTable" object:nil];
Then make a method like this:
-(void) reloadTableViewData{
[mytableView reloadData];
}
在“设置”视图中,您要重新加载RootViewController tableView,请写下:
[[NSNotificationCenter defaultCenter] postNotificationName:@"ReloadRootViewControllerTable" object:nil];
这将自动调用RootViewController的reloadTableViewData方法,而无需进行子类化或任何操作。 :)
使用带有自定义名称的通知来调用其他类中的静态方法。它们非常方便。
答案 1 :(得分:0)
我假设你想要做的是在两个不同的视图控制器中显示相同的表格。
使myTableView成为全局或单例并将其作为rootViewController和userSettingsController之间的属性共享。更好的是,做一些工作并为myTableView创建一个类,这样你就可以更容易地设置和操作它,而不必在视图控制器的实现中传播重复的代码。
在每个视图控制器中,测试以查看if (myTableVIew == nil)
,如果是,请继续并初始化并设置它(最好通过您所做的tableview类)。设置完成后,您需要确保将myTableView添加到两个视图控制器的属性(保留)中。然后要在每个控制器中显示此tableView,您只需要执行[self.view addSubview:myTableView];
,其中self是当时处于活动状态的视图控制器。
答案 2 :(得分:0)
是的mahboudz你绝对正确地说tableview值应该是零
因为如果使用init从另一个类重新初始化该类,则对象将重置为nil,这些对象是先前设置的。
而且当你想重新加载它时它不起作用,因为tableview的值是nil
我没有得到更好的答案解决这个问题,请让我知道,如果有任何伙伴知道解决方案