区分同一个类的两个实例Objective-c?

问题描述:

我有两个共享同一个委托的UIWebView对象。区分同一个类的两个实例Objective-c?

我想委托方法区分两个UIWebView对象。

现在,我将其中一个背景颜色设置为红色,并使用该属性区分两者,但其杂乱。必须有更好的办法...

谢谢!

+3

任何你不能仅仅用'=='比较它们的原因? – 2012-02-28 19:42:43

我会保留一个指向委托中的每个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中属性检查器设置标记值。