我的应用程序中有大约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类中创建方法,并从刚扩展的新类扩展所有其他子视图控制器。但我不知道这是否是完成此任务的正确方法。是吗?或者我应该采取另一种方式吗?
答案 0 :(得分:0)
我可能会遗漏一些明显的东西,但是如果所有的视图控制器子类都实现了这个方法,那么听起来它们都应该来自某个中间类。所以,你有一个派生自UIViewController并实现-changeIsFiullscreen的类,所有的视图控制器都派生自那个类。