サブビュー(私の場合はpageShadowView)が既にビューに追加されているかどうかを確認する方法を考えていました。
私はこれを思いつきましたが、それは実際には機能しません:
if ([pageShadowView isKindOfClass:[self.view class]]) {
[self.view addSubview:pageShadowView];
}
また、私はまだ自分自身について混乱しています。これは、現在のViewControllerのビューについて話していることを明確にすることに関係していることはわかっていますが、(1)他のViewControllerがない場合、または(2)それが本当に重要でない場合は、本当に必要ですか?別のviewControllerを参照したい場合は、必ずそれを呼び出しますか?
これが非常に基本的なものである場合は申し訳ありませんが、コメントをいただければ幸いです。
ここに:
BOOL doesContain = [self.view.subviews containsObject:pageShadowView];
そして、はい、これが必要ですself
。 UIViewController
には明示的なivarの「ビュー」はありません。 self.view
ステートメントは、実際にはUIViewController
のビューのゲッターであるメソッド[self view]
の呼び出しです。
一意のタグを付けます:view.tag = UNIQUE_TAG
、次に、コンテナビューの存在を確認します。
BOOL alreadyAdded = [containerView viewWithTag:UNIQUE_TAG] != nil;
このようなサブビューを見つけることができます
for(UIView *view in self.view.subviews)
{
if([view isKindOfClass:[UIView class]])
{
//here do your work
}
}
Swift:isDescendant(of view: UIView) -> Bool
またはObj-C:- (BOOL)isDescendantOfView:(UIView *)view
で検索する方法がもう1つあります。
Swift:
if myView.isDescendant(of: 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)
}
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];
}
Coneybeareの発言に追加するには、次のようにします。 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)
あなたのビューが存在するかどうかを見つけるための最良かつ簡単な方法、ビューがスーパービューに含まれているかどうかを確認する方法や、Uiviewがすでに削除されているとエラーが発生するため、このメソッドが失敗したときに表示する方法はたくさんあります。だからコードはここにあります:ここでerrorViewは私のUiViewです
errorView.tag = 333
if ( self.view?.viewWithTag(333) != nil ){
print("contain")
}
else {
print("not contain")
}
ビューの保持値を追加する
次に、保持値を確認します
> 1の場合は存在し、完全な場合は2
その後、一度リリースします
Swiftバージョン:
let doesContain = self.view?.subviews.contains(pageShadowView)