覆盖和修改协议方法
Override and modify protocols methods
我的所有 viewController 中都有运行完全相同代码的协议方法,它们在我的 viewController 上执行操作。我想调用它们并将 viewController 作为参数传递,而不是从子类中覆盖它们并一次又一次地编写相同的代码。那可能吗?怎么做?
例如,在下面的方法中,我想传递一个 child 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;
}
如果您有 subclasses 运行 相同的代码,那么该代码属于他们的 superclass。然而他们的 superclass 不一定是 UIViewController
.
所以从 UIViewController
派生一个 class 称为 BaseViewController
(或其他)并在那个超级 class 中实现 webViewDidFinishLoad:
,使用你展示的代码在你的问题中,然后从 BaseViewController
派生你所有的 subclasses。不要忘记使 BaseViewController
符合您正在处理的任何协议。
如果 subclasses 确实需要在 webViewDidLoad:
的实现中添加一些东西,那么在调用 super class 方法的 subclass 中实现它永远合适:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
// Some code here
[super webViewDidFinishLoad:webView];
// And/or here
}
我的所有 viewController 中都有运行完全相同代码的协议方法,它们在我的 viewController 上执行操作。我想调用它们并将 viewController 作为参数传递,而不是从子类中覆盖它们并一次又一次地编写相同的代码。那可能吗?怎么做? 例如,在下面的方法中,我想传递一个 child 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;
}
如果您有 subclasses 运行 相同的代码,那么该代码属于他们的 superclass。然而他们的 superclass 不一定是 UIViewController
.
所以从 UIViewController
派生一个 class 称为 BaseViewController
(或其他)并在那个超级 class 中实现 webViewDidFinishLoad:
,使用你展示的代码在你的问题中,然后从 BaseViewController
派生你所有的 subclasses。不要忘记使 BaseViewController
符合您正在处理的任何协议。
如果 subclasses 确实需要在 webViewDidLoad:
的实现中添加一些东西,那么在调用 super class 方法的 subclass 中实现它永远合适:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
// Some code here
[super webViewDidFinishLoad:webView];
// And/or here
}