我在所有viewControllers中都有协议方法,它们运行完全相同的代码,它们在我的viewController上执行操作。我想调用它们并将viewController作为参数传递,而不是从子类中覆盖它们并一次又一次地写入相同的代码。那可能吗?怎么做? 例如,在下面的方法中,我想传递一个子viewController作为参数,迭代它,并在其上执行一些句子。如果我能做到这一点,我就不需要在每个子类中重写一次这样的代码。那可行吗?
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
//iterate an array of subviews and finds indicator
NSArray *subviews = [self.view subviews];
for (UIView *subview in subviews)
{
if([subview isKindOfClass:[UIActivityIndicatorView class]] && [subview respondsToSelector:@selector(stopAnimating)])
{
[subview performSelector:@selector(stopAnimating)];
}
}
CGSize contentSize = webView.scrollView.contentSize;
CGSize viewSize = self.view.bounds.size;
float rw = viewSize.width / contentSize.width;
webView.scrollView.minimumZoomScale = rw;
webView.scrollView.maximumZoomScale = rw;
webView.scrollView.zoomScale = rw;
}
答案 0 :(得分:0)
如果您的子类运行相同的代码,那么该代码属于它们的超类。但是,他们的超类不必是UIViewController
。
因此,从UIViewController
派生一个名为BaseViewController
(或其他)的类,并使用您在问题中显示的代码在该超类中实现webViewDidFinishLoad:
,然后从中派生所有子类BaseViewController
。不要忘记让BaseViewController
符合您正在处理的任何协议。
如果子类确实需要在webViewDidLoad:
的实现中添加一些东西,那么在子类中实现它,在适当的地方调用超类方法:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
// Some code here
[super webViewDidFinishLoad:webView];
// And/or here
}