我有两个共享同一个委托的UIWebView对象。
我希望委托方法区分两个UIWebView对象。
现在我将其中一个的背景颜色设置为红色并使用该属性来区分两者,但它的混乱。必须有更好的方法......
谢谢!
答案 0 :(得分:4)
我在代表中保留指向每个UIWebView实例的指针,并在委托方法中进行比较。如,
@property (nonatomic, weak) UIWebView* webView1;
@property (nonatomic, weak) UIWebView* webView2;
...
- (void)webViewDidFinishLoad:(UIWebView *)webView {
if (self.webView1 == webView) {
// do something specific to webView1
} else if (self.webView2 == webView) {
// do something specific to webView2
}
}
答案 1 :(得分:3)
委托方法通常具有将它们作为参数之一调用的实例 - 例如在webView:didFailLoadWithError:
中,第一个参数将是无法加载的Web视图。
委托/控制器对象将/应该已经引用了它所委托的实例。
然后,您需要做的就是将已有的引用与委托方法中传递的对象进行比较,以了解哪个Web视图已向委托发送消息。
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
if( webView == myFirstWebView ){
}
else if( webView == mySecondWebView ){
}
}
答案 2 :(得分:3)
所有UIView子驱动程序,包括UIWebView都有一个标记属性,可以使用如下:
const NSInteger kLeftWebView = 20;
const NSInteger kRightWebView = 21;
...
// somewhere in initialization code
webView1.tag = kLeftWebView;
webView2.tag = kRightWebView;
...
//check for tag value for distinguishing
if (webView.tag == kLeftWebView) {
....
}
您还可以在InterfaceBuilder属性检查器中设置标记值。