Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

432
Visualizações
Cómo descartar UIView al tocar Swift4

Tengo una UIView que se muestra cada vez que presiono un botón en otra vista

 @IBOutlet weak var view1: UIView! @IBOutlet weak var view2: UIView! @IBAction func showView(_ sender: Any) { view2.isHidden = false }

Lo que quiero es agregar un gesto de toque que me permita ocultar view2 cada vez que toco fuera de la vista y, dado que esas vistas se pueden arrastrar, quiero que la segunda vista no se pueda tocar cuando esté oculta (de modo que si toco debajo de mi view No me arriesgo a moverlo Esto es lo que probé:

  1.  var gesture : UITapGestureRecognizer? override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(closeView), name: NSNotification.Name("CloseView"), object: nil) gesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.closeView)) } @objc func closeView() { if view2.isHidden == false { view2.isUserInteractionEnabled = true view2.isHidden = false self.view.removeGestureRecognizer(gesture!) } else { view2.isHidden = true view2.isUserInteractionEnabled = true self.view.addGestureRecognizer(gesture!) } }
  2.  let closeTapGesture = UITapGestureRecognizer(target: view, action: #selector(getter: view2.isHidden) view.addGestureRecognizer(closeTapGesture)

Nada de este trabajo, ¿cómo puedo hacer?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Debe verificar si realmente tocó fuera de view2:

 var gesture : UITapGestureRecognizer? override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(closeView), name: NSNotification.Name("CloseView"), object: nil) let gesture = UITapGestureRecognizer(target: self, action: #selector(closeView(_:))) view.addGestureRecognizer(gesture) self.gesture = gesture } @objc private func closeView(_ tapGestureRecognizer: UITapGestureRecognizer) { let location = tapGestureRecognizer.location(in: view2) guard view2.isHidden == false, !view2.bounds.contains(location) else { //We need to have tapped outside of view 2 return } view2.isHidden = true }
over 4 years ago · Santiago Trujillo Relatório

0

Su gesto de toque solo debe manejar closeView .

 @objc func closeView() { view2.isHidden = true view2.isUserInteractionEnabled = false gesture?.isEnabled = false }

Y el clic del botón para mostrar su vista2 debería llamar a esto.

 func showView() { view2.isHidden = false view2.isUserInteractionEnabled = true gesture?.isEnabled = true }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda