UIView: как узнать, существует ли представление?
Мне было интересно, как узнать, добавлено ли подвью (в моем случае pageShadowView) к моему представлению.
Я придумал это, но на самом деле это не работает:
if ([pageShadowView isKindOfClass:[self.view class]]) {
[self.view addSubview:pageShadowView];
}
Кроме того, я все еще запутался в себе. Я знаю, что это связано с разъяснением того, что мы говорим о представлении текущего ViewController... но действительно ли это нужно, если там (1) нет других ViewControllers или (2), если это не имеет особого значения потому что, если бы я когда-либо хотел обратиться к другому диспетчеру viewController, я бы не стал его называть?
Извините, если все это очень просто, но я буду очень благодарен за ваши комментарии.
Ответы
Ответ 1
Здесь:
BOOL doesContain = [self.view.subviews containsObject:pageShadowView];
И да, вам нужно это self
. В UIViewController
нет явного представления "ivar". Оператор self.view
фактически является вызовом метода [self view]
, который является получателем для представления UIViewController
.
Ответ 2
Дайте ему уникальный тег: view.tag = UNIQUE_TAG
, затем проверьте вид контейнера на наличие:
BOOL alreadyAdded = [containerView viewWithTag:UNIQUE_TAG] != nil;
Ответ 3
вы можете найти подвид, подобный этому
for(UIView *view in self.view.subviews)
{
if([view isKindOfClass:[UIView class]])
{
//here do your work
}
}
Ответ 4
Есть еще один способ найти в Swift: isDescendant(of view: UIView) -> Bool
или в Obj-C: - (BOOL)isDescendantOfView:(UIView *)view
Swift
if myView.isDescendant(of: self.view) {
//myView is subview of self.view, remove it.
self.view.addSubview(myView)
} else {
//myView is not subview of self.view, add it.
myView.removeFromSuperview()
}
Obj-C:
if([myView isDescendantOfView:self.view]) {
//myView is subview of self.view, remove it.
[myView removeFromSuperView];
} else {
//myView is not subview of self.view, add it.
[self.view addSubView:myView];
}
Ответ 5
Чтобы добавить к сказанному, вы можете сделать следующее. Если вы установили свой object.tag = 100;
if ([self.view.superview viewWithTag:100] == nil){ //if statement executes if the object with tag 100 in view.superview is absent (nil)
if ([self.view viewWithTag:100] == nil){ //if statement executes if the object with tag 100 in view (not superview) is absent (nil)
Ответ 6
добавить значение сохранения вида
затем проверьте значение сохранения
if > 1, то существуют, если совершенное должно быть 2
затем отпустите его один раз
Ответ 7
SWIFT VERSION:
let doesContain = self.view?.subviews.contains(pageShadowView)