从iPhone中的另一个类加载tableview

时间:2009-10-15 01:44:13

标签: iphone objective-c xcode

我有一个RootViewController类和一个UserSettingsController类。我在RootViewController类中定义了UITableView方法(numberOfRowsInSection,cellForRowAtIndexPath)。

我想从UserSettingsController类重新加载RootViewController类中定义的表视图。如何从UserSettingsController类中控制RootViewController类中的tableView对象?

我尝试了以下操作,但它尝试加载一个新的tableview对象。

RootViewController *rootViewController = [[RootViewController alloc]init]; 
[rootViewController.mytableView reloadData];
[rootViewController autorelease];

3 个答案:

答案 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

我没有得到更好的答案解决这个问题,请让我知道,如果有任何伙伴知道解决方案