簡體   English   中英

為什么我的 UIButton 的“內部修飾”事件沒有被調用?

[英]Why is my "touch up inside" event for my UIButton not being called?

我做了很多按鈕,但我不知道為什么這個不起作用。

我的層次結構是這樣設置的:

View -> Scroll View -> Subview -> Button

此子視圖中還有很多其他項目,每一個項目在被觸摸時都會起作用。 在界面生成器中,我可以看到“ Touch Up Inside ”事件綁定到我的方法

- (IBAction)favoritesButtonDepressed:(id)sender 

但是,當我單擊按鈕時,該方法永遠不會執行,並且我的斷點隨后也不會被命中。

我注意到,即使我按住按鈕,標簽也不會改變顏色(即使啟用了高亮顯示觸摸),但視圖上的另一個按鈕會改變顏色。

按鈕以及層次結構中的所有內容都啟用了用戶交互。

為了讓子視圖中的項目接收觸摸事件,我讓滾動視圖看起來像這篇文章中的第四個答案

啊哈,我明白了。 事實證明,包含按鈕(以及其他控件)的子視圖的高度為 740,按鈕的 Y 值為 781。向上移動按鈕可以解決問題。 由於一切都顯示正確,我沒想到檢查子視圖的高度。

確保您的按鈕位於 superView 的 bounds 內
如果按鈕放置在 superView 的邊界之外,則該按鈕將不可點擊,
因為hitTest函數的實現

我認為您已將按鈕放在 UIImageView 上,如果是這樣,您必須為該 UIImageView 啟用 UserInteraction。 請檢查。

如果在按鈕的任何超級視圖上實現了UITapGestureRecognizer 然后UIButtonEventTouchUpInside不會被解雇。

你應該像這樣實現 UITapGestureRecognizer

tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)];
[tapGesture setCancelsTouchesInView:NO]; // This should do what you want
[tapGesture setDelegate:self];

要考慮的另一件事是您是否在其上放置了另一個視圖?

例如,如果您從筆尖加載另一個視圖並錯誤地對其進行構圖,那么它很可能會出現在按鈕頂部,從而攔截任何按下。

您可以使用“Debug View Heirachy”控件檢查這是 XCode 6。

布局看起來像:

視圖 -> 子視圖(UIView) -> 按鈕

通過勾選子視圖(UIView)屬性中的“啟用用戶交互”復選框來修復它。

如果您有一個父 UIView,您可以嘗試將其 userInteractionEnabled 屬性設置為 True,在某些情況下它可以解決問題。

ParentView -> ChildView -> StackView -> UIButton

在這種情況下,我將 ChildView 的 userInteraction 設置為 true 並解決了問題。

我最近有類似的事情;

嘗試刪除 Controller 中的(IBAction)favoritesButtonDepressed:(id)sender聲明(和方法),然后再次從 Interface Builder 中“拖動”它。

在我的情況下,按鈕的 IBAction 不起作用我嘗試了很多方法。 所以我為按鈕制作了一個 IBOutlet,並通過使用“addTarget”方法添加了點擊操作,它就像一個魅力。

[myButton addTarget:self action:@selector(dismissClickFunction:) forControlEvents:UIControlEventAllEvents];

故障排除:

  • 確保按鈕前面沒有隱藏視圖。
  • 確保用戶交互設置為 true。

確保button.isEnabled沒有設置為false

我有類似的問題。

打開Debug View Hierarchy並確保沒有父視圖的heightwidth zero

在我的情況下, UIButton位於垂直UIStackView中的容器( UIView )中。 我向容器添加了高度約束,觸摸事件開始工作。

我有同樣的問題。

我在 xib 中有一個按鈕,我放置在視圖中。

我將 xib 的實例保留為導入時設置的默認小尺寸,因為我在代碼中自動調整它的大小以處理設備旋轉。

這導致按鈕即使明顯位於屏幕中間也不會對觸摸做出反應。

我通過簡單地更改 xib 實例的布局來填充父視圖來修復它。

檢查是否缺少任何約束。 所有的約束都應該平衡,沒有紅線。 這為我解決了這個問題。

我的 ViewController 是另一個 ViewController 中某個區域的子控制器。 為了簡化,我刪除了其中的一堆控件,但其余按鈕將不再處理點擊向下,盡管已啟用,並且所有視圖都啟用了 userInteraction。

我嘗試動態創建一個按鈕,沒有用。 認為我的原始構建資源不好,我刪除了派生數據,退出 Xcode,刪除應用程序並從頭開始重建,不行。

最后我嘗試用黃色繪制父視圖的背景,沒有出現確認問題是它的框架。 父視圖框架在情節提要中類似於 (0,0,320,200),但在 viewDidAppear 中它的高度僅為 0 點,垂直偏移 150 點。 我嘗試手動設置它,謝天謝地,黑客沒有奏效。 所以我做了你應該對行為不端的故事板做的事情,我用火燒掉了它!

實際上我刪除了它並創建了一個新的故事板來替換它,只包含新設計的視圖和控件。 鏈接到我的 ViewController 代碼,它工作沒有任何問題。

如果您的 UIButton 嵌入在 UIScrollView 中,請確保禁用滾動視圖屬性Delay Touch Down ,這為我解決了問題

這取決於各種各樣的事情和情況。

  1. 通過查看視圖的層次結構來檢查點擊響應鏈​​,並查看一個視圖是否位於另一個視圖的頂部,並導致點擊無法按您的預期工作,就像 HTML 中的 Z-index 一樣!
  2. 檢查視圖的 userInteraction 是否設置為啟用
  3. 如果您正在使用 Storyboard,請檢查它是否連接到正確的動作,並檢查您在情節提要中沒有超過一個動作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM