为什么我的ViewController在一次调用present(_:animated:completion:)方法后会连



当我试图从TabBarController的第四个选项卡模式化地呈现视图控制器时,它是嵌入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)
}

}

在长按手势的处理程序中调用present方法。//注意:当我把长按改为敲击时,它正常工作,当我把它改回来时,它又出现了两次。

这是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)
}

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)
}

最新更新