Ios 与具有多个子ViewController的ViewController交互

Ios 与具有多个子ViewController的ViewController交互,ios,uiviewcontroller,Ios,Uiviewcontroller,我有一个父视图控制器和一个子视图控制器。childViewController就像一张卡片,功能类似于苹果的股票或地图应用程序。我可以展开或折叠它,并与其中的按钮进行交互。唯一的问题是,我无法与父视图控制器中的任何按钮交互。谁都知道问题出在哪里 “不能互动”应该意味着你不能按。如果是这种情况,最有可能的原因是按钮上覆盖了某种透明的东西,因此在解决此问题之前,请确保在测试时没有透明背景。另一个可能的原因是您设置了按钮的某些属性,这些属性可能会导致此行为,但您可能知道这几乎肯定是前者。我解决了它。这

我有一个父视图控制器和一个子视图控制器。childViewController就像一张卡片,功能类似于苹果的股票或地图应用程序。我可以展开或折叠它,并与其中的按钮进行交互。唯一的问题是,我无法与父视图控制器中的任何按钮交互。谁都知道问题出在哪里


“不能互动”应该意味着你不能按。如果是这种情况,最有可能的原因是按钮上覆盖了某种透明的东西,因此在解决此问题之前,请确保在测试时没有透明背景。另一个可能的原因是您设置了按钮的某些属性,这些属性可能会导致此行为,但您可能知道这几乎肯定是前者。

我解决了它。这段代码应该工作得很好。之前没有的原因是我在visualEffectView中添加了。它涵盖了父对象。

您可以发布视图控制器的代码吗?这里的信息太少,无法知道发生了什么。例如,如何展开和折叠子视图控制器的视图?显示的按钮是属于子按钮还是属于父按钮?按钮属于父按钮。另外,我添加了代码,您可以检查我的代码。我刚刚编辑了代码。按钮应返回按下的按钮
class BaseViewController: UIViewController {

enum CardState {
    case expanded
    case collapsed
}

var cardViewController: CardViewController!
var visualEffectView: UIVisualEffectView!

lazy var deviceCardHeight: CGFloat = view.frame.height - (view.frame.height / 6)
lazy var cardHeight: CGFloat = deviceCardHeight
let cardHandleAreaHeight: CGFloat = 65

var cardVisible = false
var nextState: CardState {
    return cardVisible ? .collapsed : .expanded
}

override func viewDidLoad() {
    super.viewDidLoad()
    setupCard() 
}

@IBAction func expandCard(_ sender: Any) {
    print("Button Pressed")
}
func setupCard() {

    cardViewController = CardViewController(nibName: "CardViewController", bundle: nil)
    self.addChild(cardViewController)
    self.view.addSubview(cardViewController.view)

    //Set up frame of cardView
    cardViewController.view.frame = CGRect(x: 0, y: view.frame.height - cardHandleAreaHeight, width: view.frame.width, height: cardHeight)

    cardViewController.view.clipsToBounds = true

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleCardTap(recognizer:)))
         cardViewController.handleArea.addGestureRecognizer(tapGestureRecognizer)

}

@objc func handleCardTap(recognizer: UITapGestureRecognizer) {
    switch recognizer.state {
    case .ended:
        animationTransitionIfNeeded(state: nextState, duration: 0.9)
    default:
        break
    }
}

 func animationTransitionIfNeeded(state: CardState, duration: TimeInterval) {
    if runningAnimations.isEmpty {
        let frameAnimator = UIViewPropertyAnimator(duration: duration, dampingRatio: 1) {
            switch state {
            case .expanded:
                self.cardViewController.view.frame.origin.y = self.view.frame.height - self.cardHeight
            case .collapsed:
                self.cardViewController.view.frame.origin.y = self.view.frame.height - self.cardHandleAreaHeight
            }
        }

        frameAnimator.addCompletion { _ in
            //if true set to false, if false set to true
            self.cardVisible = !self.cardVisible
            self.runningAnimations.removeAll()
        }

        frameAnimator.startAnimation()
        runningAnimations.append(frameAnimator)

        let cornerRadiusAnimator = UIViewPropertyAnimator(duration: duration, curve: .linear) {
            switch state {
            case .expanded:
                self.cardViewController.view.layer.cornerRadius = 12
            case .collapsed:
                self.cardViewController.view.layer.cornerRadius = 0
            }
        }

        cornerRadiusAnimator.startAnimation()
        }
     }