为什么在一次调用present(_:animated:completion :)方法后,我的ViewController连续两次模态显示?

时间:2019-01-19 11:48:19

标签: ios swift uitableview uiview

当我尝试从我的TabBarController的第4个选项卡中以模式方式显示视图控制器时,该选项卡是嵌入在NavigationViewController中的TableViewController,它连续出现两次。 实际方法present(_:animated:completion:)连续被调用两次,而实际应该只发生一次。

这就是我从UITableViewController调用方法的方式。现在,因为我收到“正在尝试显示其视图不在窗口层次结构中的vc”警告,所以尝试了此替代方法,并且不再收到该警告,但是现在我遇到了这个问题。

((UIApplication.shared.keyWindow?.rootViewController as? MainTabBarViewController)?.selectedViewController as? NavigationPodesavanjaViewController)?.visibleViewController?.present(Egg, animated: true, completion: nil)

这是来自视图控制器的所有内容。就像现在的虚拟内容一样,带有后退按钮:

import UIKit

class EasterEggViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    view.backgroundColor = ConstantsClass.ljubicastaBoja

    let imageView = UIImageView(image: UIImage(named: "operator-ikonica"))
    view.addSubview(imageView)

    imageView.translatesAutoresizingMaskIntoConstraints = false
    imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    imageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    imageView.frame.size = CGSize(width: 250, height: 250)

    let backButton = UIButton()
    view.addSubview(backButton)

    backButton.setTitle("Nazad", for: .normal)
    backButton.titleLabel?.textColor = .white
    backButton.frame = CGRect(x: 50, y: 50, width: 100, height: 20)
    backButton.titleLabel?.adjustsFontSizeToFitWidth = true
    backButton.addTarget(self, action: #selector(dismissAction), for: .touchUpInside)

}

@objc func dismissAction() {
    dismiss(animated: true, completion: nil)
}


}

当前的方法在处理程序中被调用以长按手势。 //注意:当我长按以轻按时,它应能正常工作,当我将其改回时,它又再次出现了两次。

这是viewDidLoad代码的一部分:

    let longPressEgg = UILongPressGestureRecognizer()
    longPressEgg.addTarget(self, action: #selector(easterEggScreenPresent))
    easterEgg.addGestureRecognizer(longPressEgg)

这是处理程序:

 @objc func easterEggScreenPresent(){

    let Egg = EasterEggViewController()
    ((UIApplication.shared.keyWindow?.rootViewController as? MainTabBarViewController)?.selectedViewController as? NavigationPodesavanjaViewController)?.visibleViewController?.present(Egg, animated: true, completion: nil)
}

1 个答案:

答案 0 :(得分:1)

以不同的状态多次调用UILongPressGestureRecognizer。在您的情况下,手势开始时应显示视图控制器。将您的easterEggScreenPresent更改为以下内容:

@objc func easterEggScreenPresent(sender: UILongPressGestureRecognizer) {
    guard sender.state == .began else { return }

    let egg = EasterEggViewController()
    ((UIApplication.shared.keyWindow?.rootViewController as? MainTabBarViewController)?.selectedViewController as? NavigationPodesavanjaViewController)?.visibleViewController?.present(egg, animated: true, completion: nil)
}