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/ 它提供了一些代码工具来追踪这类事情。
我有一个包含两个子视图的视图。一个视图 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/ 它提供了一些代码工具来追踪这类事情。