Swift, скрыть / удалить окно (вид?) - PullRequest
0 голосов
/ 22 декабря 2018

Я хотел бы удалить представление, которое я создал в приведенном ниже коде (окно keyWindow или v UIView).

Я пытался использовать тег .tag, который работает для просмотра, ноон не работает.

Чтобы объяснить назначение кода, он тестирует с Firebase, если есть подключение к интернету;если нет, то в середине экрана не отображается wifi gif;если да, no wifi gif должен исчезнуть (но не в моем случае).

Здесь он правильно показывает gif с окном (v), и когда он получает соединение, он пытается выполнить тест, чтобы удалить вид, ноон ничего не делает

Этот код должен работать на каждом контроллере uiview моего приложения (это моя цель), но сейчас я тестирую его с локальным функционалом на контроллере представления

EDIT: вот фиксированный код для интересующихся:)

 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)




                }
            })
        })
    }

1 Ответ

0 голосов
/ 22 декабря 2018

Это не работает, потому что вы добавляете v к window, а не self.view;в результате этого viewWithTag равно nil.Чтобы исправить это, измените self.view.viewWithTag(100) на window.viewWithTag(100).

viewWithTag(_:), чтобы просмотреть иерархию представления получателя для представления с соответствующим тегом.В вашем случае v не входит в иерархию self.view.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...