我想对几个tableviewcontroller使用相同的.h和.m。但是,我想根据当前的观点做不同的事情。问题是,我不知道如何区分我的TableViewController(我看到有故事板ID,如何使用它?),怎么说如果它是viewNumeroOne我这样做,否则如果viewNumerotwo我这样做。
或者,也许我需要为每个TableViewController都有一个.h和.m?但它似乎不是最好的解决方案。
有人帮我吗?
THX,
答案 0 :(得分:1)
这取决于您的确切用例,但您可能希望使用前一个ViewController中的prepareForSegue
将标志传递给TableViewController。
您需要在segue中添加标识符,在下面的示例中我使用MoveToTableViewController
。
例如:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"MoveToTableViewController"]) {
MyTableViewController *tableViewController = [segue destinationViewController];
[tableViewController setTableViewControllerMode:TableViewControllerModeTime];
}
}
在这种情况下,TableViewControllerModeTime
应该是enum
的一部分,您需要在MyTableViewController.h中声明(@interface
标记上方)
typedef enum TableViewControllerMode {
TableViewControllerModeTime,
TableViewControllerModeDate,
TableViewControllerModeUserData
} TableViewControllerMode ;
您还应该添加
@property (nonatomic, assign) TableViewControllerMode tableViewControllerMode;
到您的MyTableViewController.h
文件,但此@property应位于@interface
@end
和MyTableViewController
标签之间
答案 1 :(得分:0)
为此,我在每个ViewController中创建具有清晰背景的小隐藏UIViews,并将它们作为IBOutlets链接到.h文件,其名称为'checkViewControllerOne''checkViewControllerTwo'等等。
然后在代码中你可以像这样要求ViewController:
if (checkViewControllerOne) {
//do stuff for controller one
}
if (checkViewControllerTwo) {
//do stuff for controller two
}
我确信有更优雅的方法可以做到这一点,但这种方法运行良好,可能是最快最简单的方法。
答案 2 :(得分:0)
您可以拥有一个抽象的超类,其中包含您希望viewControllers共享的所有代码,然后是每个单独使用的具体子类,它们只会覆盖每个不同用途所需的内容...