1

我的应用程序中有大约 8 个视图控制器,每个视图控制器都有一个功能完全相同。我希望能够将它浓缩成一个可以为所有 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,在那个类中创建方法,并从我刚刚扩展的新类中扩展所有其他子视图控制器。不过,我不知道这是否是完成这项任务的正确方法。是吗?或者我应该以其他方式做吗?

4

1 回答 1

0

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

于 2013-10-21T19:25:45.297 回答