IBAction 未触发子视图中的按钮

IBAction not firing for button in subview

我有一个包含两个子视图的视图。一个视图 AnswerView 用于对元素进行分组,但也可以隐藏和取消隐藏它们。在这个 AnswerView 中是另一个名为 AnswerButtons 的子视图,它只包含两个按钮,该视图的主要目的是帮助格式化。我现在只有一个用于顶层父视图的视图控制器。

当我单击最里面的子视图上的“是”或“否”按钮之一时,不会触发 IBAction 事件。我尝试将打印语句放在那里并设置断点,但从未到达它们。但是,如果我将按钮移至顶层视图,一切都会按预期进行。

控制器代码:

class ViewController: UIViewController {

@IBOutlet weak var revealButton: UIButton!
@IBOutlet weak var answerView: UIView!
@IBOutlet weak var yesButton: UIButton!
@IBOutlet weak var noButton: UIButton!
@IBOutlet weak var answerText: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    answerView = view.viewWithTag(42);
}

@IBAction func RevealPressed(_ sender: Any) {
    answerView.isHidden = false;
    revealButton.isHidden = true;
}
@IBAction func yesPressed(_ sender: Any) {
    print("YES PRESSED!!!")
    answerView.isHidden = true;
    revealButton.isHidden = false;
}

@IBAction func testButton(_ sender: Any) {
    yesButton.setTitle("changed", for: UIControl.State.normal)
}

@IBAction func NoPressed(_ sender: Any) {
    answerView.isHidden = true;
    revealButton.isHidden = false;
}

}

故事板和视图层次结构:

通常,当按钮超出其超级视图(回答视图或回答按钮)的范围时,就会发生这种情况。这样的按钮是不能点击的。

通常发生这种情况是因为父视图没有大小。没有size的superview有可见但不可触及的subview,这让人很困惑。

这可能是因为您的约束有误。您可以使用 View Debugger 跟踪它。

另一种可能性是超级视图的 isUserInteractionEnabled 已关闭。这又会使子视图不可触及。

另见我的 https://www.biteinteractive.com/sherlock-holmes-and-the-mystery-of-the-untappable-button/ 它提供了一些代码工具来追踪这类事情。