覆盖和修改协议方法

时间:2015-08-21 07:57:54

标签: ios objective-c iphone uiwebview

我在所有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;

}

1 个答案:

答案 0 :(得分:0)

如果您的子类运行相同的代码,那么该代码属于它们的超类。但是,他们的超类不必是UIViewController

因此,从UIViewController派生一个名为BaseViewController(或其他)的类,并使用您在问题中显示的代码在该超类中实现webViewDidFinishLoad:,然后从中派生所有子类BaseViewController。不要忘记让BaseViewController符合您正在处理的任何协议。

如果子类确实需要在webViewDidLoad:的实现中添加一些东西,那么在子类中实现它,在适当的地方调用超类方法:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    // Some code here
    [super webViewDidFinishLoad:webView];
    // And/or here
}