-3

我有以下 UIView 结构:

UIView A contains UIView B
UIView B contains UIView C
UIView C contains UIView D

在Objective C中,是否可以从UIView D中获取UIView Class实例A来访问D中A的实例方法?

4

3 回答 3

3

如果您确定这将是您在所有情况下的情况,您可以从视图 D 中执行以下操作:

[self.superview.superview.superview instanceMethod:anArgument]; // Ew.

如果您知道视图 A 在视图层次结构中处于较高位置,但您不知道在哪里可以循环遍历超级视图,直到找到它。你只需要一些东西来识别视图。例如,您可以将 View A 的tag属性设置为一个数字(比如说42)并以这种方式找到它:

UIView *sup = self.superview;
while (sup.tag != 42) {  
    sup = sup.superview; // Keep going up the hierarchy until you find a match.
}

[sup instanceMethod:anArgument];

注意:此代码非常不安全。仅当您确定它位于层次结构中的某个位置时才使用。

另请参阅文档中的此处

于 2013-05-15T16:01:08.823 回答
0

是的:试试,

UIView *refView = [[[D superView] superView] superView];

现在检查

if([refView isEqualTo:refView]){
   NSLog(@"I am A");
}
于 2013-05-21T10:37:47.703 回答
0

我编写以下代码来从 D 访问 A 的实例方法。实际上,在此之后我从 D 获得了 A 对象的实例。这里 A 是 D 对象的父视图。

-(void)getTheSpecificSuperView
{
    BOOL found = FALSE;
    UIView *currentSuperView = self; // right now it is D

    while (!found) {
        if ([[currentSuperView superview] isKindOfClass:[A class]]) {
            found = TRUE;
            A *a = (A *)[currentSuperView superview];
            [a accessAnInstanceMethod];
        }
        else{
            currentSuperView = [currentSuperView superview];
        }

    }
}
于 2013-05-15T15:57:32.987 回答