gpt4 book ai didi

ios - 为什么我的 ViewController 在一次调用 present(_ :animated:completion:) method?

转载 作者:行者123 更新时间:2023-11-28 13:53:17 24 4
gpt4 key购买 nike

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

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

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

这是来自 View Controller 的所有内容。它现在就像一个虚拟内容,带有一个后退按钮:

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

最佳答案

UILongPressGestureRecognizer 被多次调用,状态不同。在您的情况下,您应该在手势开始时显示 View Controller 。将您的 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)
}

关于ios - 为什么我的 ViewController 在一次调用 present(_ :animated:completion:) method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54266748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com