从父类的实例调用子类方法

时间:2013-10-21 19:17:03

标签: ios objective-c cocoa-touch inheritance

我的应用程序中有大约8个视图控制器,我在每个视图控制器中都有一个完全相同的功能。我希望能够将它压缩成一个可以为所有人执行任务的中心函数。该函数需要接收自身的实例,以便它可以在适当的视图控制器上执行任务,但是因为我没有知道哪一个被传递我将实例类型设置为UIViewController *。这样,我就能够接收任何视图控制器。问题是我必须从这个方法执行一个方法,并且因为每个方法都是自定义到UIViewController和im PASSING UIViewController的那些子类,所以我无法从实例访问这些函数。有办法做到这一点吗?从父类的实例访问子类方法?这是一些代码:

- (void)changeIsFullscreen:(UIViewController *)viewController { // <-- Right here is the 
                           // ^^^ instance of the class that's passed to the function. I 
                           // can't pass the child because there are so many different 
                           // children that will be using it.
    if (isFullscreen == NO) {
        [viewController setIsFullscreen:YES]; // Right here is the child
                                             // class method that i need to call.
                                            // They all have the method, and if they 
                                           // don't i could use try/catch blocks to 
                                          // catch the error if there was some way to do it.
    } else {
        [viewController setIsFullscreen:NO]; // Right here is the child
                                             // class method that i need to call

    }
}

我知道一种方法是扩展UIViewController,在THAT类中创建方法,并从刚扩展的新类扩展所有其他子视图控制器。但我不知道这是否是完成此任务的正确方法。是吗?或者我应该采取另一种方式吗?

1 个答案:

答案 0 :(得分:0)

我可能会遗漏一些明显的东西,但是如果所有的视图控制器子类都实现了这个方法,那么听起来它们都应该来自某个中间类。所以,你有一个派生自UIViewController并实现-changeIsFiullscreen的类,所有的视图控制器都派生自那个类。