[英]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.