我的应用程序中有大约 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,在那个类中创建方法,并从我刚刚扩展的新类中扩展所有其他子视图控制器。不过,我不知道这是否是完成这项任务的正确方法。是吗?或者我应该以其他方式做吗?