Ответ 1
UIView
сохраняет свою SuperView и доступно с superview
-property просто попробовать
if([viewB superview]!=nil)
NSLog(@"visible");
else
NSLog(@"not visible");
Но лучший подход - использовать hidden
-property UIView
У меня есть приложение, в которое я добавляю subview (и удаляю одно и то же подвью на основе пользовательских взаимодействий). Я ищу способ проверить, присутствует ли подвью или нет в любой момент времени.
Например:
В текущем представлении (UIView *viewA
) я добавляю subview (UIView *viewB
). Затем я хочу, чтобы проверить, viewB
ли viewB
в любой момент времени.
Извините, если это не очень понятно, это довольно сложно описать.
UIView
сохраняет свою SuperView и доступно с superview
-property просто попробовать
if([viewB superview]!=nil)
NSLog(@"visible");
else
NSLog(@"not visible");
Но лучший подход - использовать hidden
-property UIView
Я прошел ту же самую проблему и посоветовался с Apple Documentation и придумал это элегантное решение:
if([self.childView isDescendantOfView:self.parentView])
{
// The childView is contained in the parentView.
}
Здесь метод, который я помещал в appDelegate, чтобы я мог отображать всю иерархию подвэйлов из любой точки.
// useful debugging method - send it a view and it will log all subviews
// can be called from the debugger
- (void) viewAllSubviews:(UIView *) topView Indent:(NSString *) indent {
for (UIView * theView in [topView subviews]){
NSLog(@"%@%@", indent, theView);
if ([theView subviews] != nil)
[self viewAllSubviews:theView Indent: [NSString stringWithFormat:@"%@ ",indent]];
}
}
вызовите его строкой с одним символом, и она будет отступом для вас. (т.е. [appDelegate viewAllSubviews:self.view Indent:@" "];
)
Мне сначала полезно очистить панель отладки, а затем вызвать это из отладчика и скопировать в текстовый редактор, например BBEdit, который отобразит отступы.
Вы можете вызвать его, используя вид mainWindow и увидеть все на своем экране.
Я обновился до Swift4, Большое спасибо @Shinnyx и @thomas.
if viewB.superview != nil{
print("visible")
}
else{
print("not visible")
}
if selfView.isDescendant(of: self.parentView) {
print("visible")
}
else{
print("not visible")
}
func isDescendant (из: UIView)
Возвращает логическое значение, указывающее, является ли приемник подчиненным объектом данного представления или идентичным этому представлению.