iOS相同的.h和.m用于少数TableViewController

时间:2014-03-09 15:04:25

标签: ios tableview

我想对几个tableviewcontroller使用相同的.h和.m。但是,我想根据当前的观点做不同的事情。问题是,我不知道如何区分我的TableViewController(我看到有故事板ID,如何使用它?),怎么说如果它是viewNumeroOne我这样做,否则如果viewNumerotwo我这样做。

或者,也许我需要为每个TableViewController都有一个.h和.m?但它似乎不是最好的解决方案。

有人帮我吗?

THX,

3 个答案:

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

@endMyTableViewController标签之间

答案 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共享的所有代码,然后是每个单独使用的具体子类,它们只会覆盖每个不同用途所需的内容...