简体   繁体   English

删除uiwindow的子视图?

[英]remove subview of uiwindow?

i want to remove a view from uiwindow,so i nslog in appdelegate method,it says window's subviews count as two NSLog(@" %d",[[self.window subviews] count]);我想从 uiwindow 中删除一个视图,所以我在 appdelegate 方法中 nslog,它说窗口的子视图计数为两个NSLog(@" %d",[[self.window subviews] count]); so how can i remove that subviews from window,if i remove that subviews i have tab bar controller to be continued...那么如何从窗口中删除该子视图,如果我删除该子视图,我将继续使用标签栏控制器...

- (void) GetUserCompleted

{
    NSLog(@"   %@",[[self.window subviews] objectAtIndex:0]);   
    NSLog(@"   %@",[[self.window subviews] objectAtIndex:1]); 
}

You can remove the a single subview using the following code.您可以使用以下代码删除单个子视图。

[subview_Name removeFromSuperview];

if you want to remove all subviews form the view then use this.如果要从视图中删除所有子视图,请使用它。

NSArray *subViewArray = [self.window subviews];
for (id obj in subViewArray)
{
    [obj removeFromSuperview];
}

Hope the below code will be useful for remove particular view希望以下代码对删除特定视图有用

   Set tag for that remove view

   subview.tag = 1;

   then

   [[[self window] viewWithTag:1] removeFromSuperview];

Swift version of @Maddy 's answer: @Maddy 答案的 Swift 版本:

//create view then add a tag to it. The tag references the view
var myNewView = UIView()
myNewView.tag = 100

//add the  view you just created to the window
window.addSubview(myNewView)

//remove the view you just created from the window. Use the same tag reference
window.viewWithTag(100)?.removeFromSuperview

Update更新

Here is another way to remove a UIView without using a tag from the window.这是在不使用窗口中的标签的情况下删除 UIView 的另一种方法。 The key is the view has to be an instance property.关键是视图必须是实例属性。

lazy var myNewView: UIView = {
    let view = UIView()
    return view
}()

viewDidLoad() {

    guard let window = UIApplication.shared.windows.first(where: \.isKeyWindow) else { return }

    window.addsubView(myNewView)
}

// call this in deinit or wherever you want to remove myNewView
func removeViewFromWindow() {

    guard let window = UIApplication.shared.windows.first(where: \.isKeyWindow) else { return }

    if myNewView.isDescendant(of: window) {
        print("myNewView isDescendant of window")
    }

    for view in window.subviews as [UIView] where view == myNewView {
        view.removeFromSuperview()
        break
    }

    if myNewView.isDescendant(of: window) {
        print("myNewView isDescendant of window")
    } else {
        print("myNewView is REMOVED from window") // THIS WILL PRINT
    }
}

deinit() {
    removeViewFromWindow()
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM