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

时间:2012-02-28 19:39:17

标签: objective-c class instance

我有两个共享同一个委托的UIWebView对象。

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

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

谢谢!

3 个答案:

答案 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属性检查器中设置标记值。