IBOutlet
附加到我在.xib文件中添加的表
IBOutlet UITableView *table;
在PrimaryViewController.m中的我从TableDataController类构造一个新的tableController并将其附加到表
tableController = [[TableDataController alloc] initWithStyle:UITableViewStylePlain];
//Attach the table controller as datasource and delegate to the table
[table setDelegate:tableController];
[table setDataSource:tableController];
现在表中的所有数据都来自tableController。因为PrimaryViewController是被推送到navigationController的堆栈而不是TableDataController类的类;使用:
[self.navigationController pushViewController:newViewController];
tableController 中的没有任何结果,因为 tableController 没有 navigationController 。 PrimaryViewController 可以使用 navigationController 。
我希望能够使用TableDataController中的函数didSelectRowAtIndexPath:
将新的视图控制器推送到PrimaryViewController的堆栈上。
请注意:我不能#import "ParimaryViewController.h"
在我的TableDataController.h中,我可以发送它的( PrimaryViewController )对象 - 然后它们将相互交叉导入,从而产生语义错误。
PrimaryViewController是一个常规类,它扩展了UIViewController类,其中.xib没什么特别之处。 TableDataController是一个常规类,它使用 no .xib文件扩展UITableViewController类。
答案 0 :(得分:0)
您可以将PrimaryViewController
标头导入TableDataController。 m 以避免导入周期。
您的TableDataController
只需要引用PrimaryViewController
。您所要做的就是向TableDataController
添加属性,并在创建数据控制器后立即设置。
@property (assign, nonatomic) PrimaryViewController * viewController;
为了能够使用该类名,您需要在TableDataController.h中的导入下方添加一个前向声明:
@class PrimaryViewController;
这让编译器知道有这样一个类,你将在这个头文件中引用它,但它将在别处定义。
照常合成属性。创建TableDataController
时,将该属性设置为指向创建视图控制器:
tableController = [[TableDataController alloc] initWithStyle:UITableViewStylePlain];
[tableController setViewController:self];
现在,您可以通过访问该属性在TableDataController
的方法中向视图控制器发送消息:
[self.viewController pushViewController:newViewController];