区分同一个类的两个实例Objective-c?
问题描述:
我有两个共享同一个委托的UIWebView对象。区分同一个类的两个实例Objective-c?
我想委托方法区分两个UIWebView对象。
现在,我将其中一个背景颜色设置为红色,并使用该属性区分两者,但其杂乱。必须有更好的办法...
谢谢!
答
我会保留一个指向委托中的每个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
}
}
答
委托方法通常具有将它们作为参数之一调用的实例 - 例如,在webView:didFailLoadWithError:
第一个参数将是未能加载的Web视图。
委托/控制器对象将/应该已经有它所委派的实例的引用。
然后,您要做的就是比较您已经拥有的对象,以便在委托方法中传递该对象以知道哪个Web视图已传递委托。
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
if(webView == myFirstWebView){
}
else if(webView == mySecondWebView){
}
}
答
所有的UIView subivews,包括一个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中属性检查器设置标记值。
任何你不能仅仅用'=='比较它们的原因? – 2012-02-28 19:42:43