我有以下 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的实例方法?
我有以下 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的实例方法?
如果您确定这将是您在所有情况下的情况,您可以从视图 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];
注意:此代码非常不安全。仅当您确定它位于层次结构中的某个位置时才使用。
另请参阅文档中的此处。
是的:试试,
UIView *refView = [[[D superView] superView] superView];
现在检查
if([refView isEqualTo:refView]){
NSLog(@"I am A");
}
我编写以下代码来从 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];
}
}
}