Swift , hide/remove 一 window (查看?)
Swift , hide/remove a window (View?)
我想删除我在下面的代码中创建的视图(window keyWindow 或 v UIView)。
我尝试使用适用于查看的 .tag,但它不起作用。
为了解释代码的用途,它使用 Firebase 测试是否有互联网连接;如果没有,屏幕中间会出现一个没有 wifi 的 gif 图像;如果是,无 wifi gif 应该消失(但在我的情况下不是)。
在这里,它正确显示了带有 window (v) 的 gif,当它获得连接时,它尝试测试以删除视图,但它什么都不做
此代码应该适用于我应用程序的每个 uiviewcontroller(这是我的目标),但现在我正在 viewcontroller
上使用本地函数对其进行测试
编辑:这是感兴趣的人的固定代码:)
func testconnection() {
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2), execute: {
let connectedRef = Database.database().reference(withPath: ".info/connected")
connectedRef.observe(.value, with: { snapshot in
if let connected = snapshot.value as? Bool, connected {
print("Connected")
let window = UIApplication.shared.keyWindow!
let v = UIView(frame: CGRect(x: self.view.center.x-50, y: self.view.center.y-10, width: 100, height: 100))
v.backgroundColor = UIColor.black
v.tag = 100
print("Start testing to remove the view with correct tag")
if let viewWithTag = window.viewWithTag(100) {
print("yes, remove view")
viewWithTag.removeFromSuperview()
}else{
print("Not the correct tag / view not created")
}
}
else {
print ("Not connected")
SDWebImageCodersManager.sharedInstance().addCoder(SDWebImageGIFCoder.shared())
let window = UIApplication.shared.keyWindow!
let v = UIView(frame: CGRect(x: self.view.center.x-50, y: self.view.center.y-10, width: 100, height: 100))
window.addSubview(v);
let imageData = try? Data(contentsOf: Bundle.main.url(forResource: "noWifi1", withExtension: "gif")!)
let advTimeGif = UIImage.gifImageWithData(imageData!)
let imageView2 = UIImageView(image: advTimeGif)
imageView2.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
imageView2.tag = 100
v.addSubview(imageView2)
}
})
})
}
它不起作用,因为你将 v
添加到 window
,而不是 self.view
;因此,viewWithTag
是 nil
。要解决此问题,请将 self.view.viewWithTag(100)
更改为 window.viewWithTag(100)
。
viewWithTag(_:)
将查看接收者的视图层次结构以查找具有匹配标签的视图。在您的情况下,v
不在 self.view
的层次结构中。
我想删除我在下面的代码中创建的视图(window keyWindow 或 v UIView)。
我尝试使用适用于查看的 .tag,但它不起作用。
为了解释代码的用途,它使用 Firebase 测试是否有互联网连接;如果没有,屏幕中间会出现一个没有 wifi 的 gif 图像;如果是,无 wifi gif 应该消失(但在我的情况下不是)。
在这里,它正确显示了带有 window (v) 的 gif,当它获得连接时,它尝试测试以删除视图,但它什么都不做
此代码应该适用于我应用程序的每个 uiviewcontroller(这是我的目标),但现在我正在 viewcontroller
上使用本地函数对其进行测试编辑:这是感兴趣的人的固定代码:)
func testconnection() {
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2), execute: {
let connectedRef = Database.database().reference(withPath: ".info/connected")
connectedRef.observe(.value, with: { snapshot in
if let connected = snapshot.value as? Bool, connected {
print("Connected")
let window = UIApplication.shared.keyWindow!
let v = UIView(frame: CGRect(x: self.view.center.x-50, y: self.view.center.y-10, width: 100, height: 100))
v.backgroundColor = UIColor.black
v.tag = 100
print("Start testing to remove the view with correct tag")
if let viewWithTag = window.viewWithTag(100) {
print("yes, remove view")
viewWithTag.removeFromSuperview()
}else{
print("Not the correct tag / view not created")
}
}
else {
print ("Not connected")
SDWebImageCodersManager.sharedInstance().addCoder(SDWebImageGIFCoder.shared())
let window = UIApplication.shared.keyWindow!
let v = UIView(frame: CGRect(x: self.view.center.x-50, y: self.view.center.y-10, width: 100, height: 100))
window.addSubview(v);
let imageData = try? Data(contentsOf: Bundle.main.url(forResource: "noWifi1", withExtension: "gif")!)
let advTimeGif = UIImage.gifImageWithData(imageData!)
let imageView2 = UIImageView(image: advTimeGif)
imageView2.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
imageView2.tag = 100
v.addSubview(imageView2)
}
})
})
}
它不起作用,因为你将 v
添加到 window
,而不是 self.view
;因此,viewWithTag
是 nil
。要解决此问题,请将 self.view.viewWithTag(100)
更改为 window.viewWithTag(100)
。
viewWithTag(_:)
将查看接收者的视图层次结构以查找具有匹配标签的视图。在您的情况下,v
不在 self.view
的层次结构中。