簡體   English   中英

為子視圖禁用用戶交互會干擾對子視圖的事件處理?

[英]Disabling user interaction for subview interferes with event handling for superview?

CustomView包含一個子視圖SubView ,該子視圖實現了點擊處理程序。 但是,對於此實現, SubView應該忽略水龍頭,而讓CustomView處理它們。

應該使用下面的代碼來實現此目的,但是將userInteractionEnabled設置為false可以防止將CustomView上的SubView層疊到CustomView 如果SubView userInteractionEnabled設置為false, CustomView仍接收點擊事件嗎?

Apple文檔說將userInteractionEnabled設置為false會導致事件被忽略,而不是視圖會吞噬事件,因此超級視圖不會接收到它們。

// CustomView class, which is a subclass of UIView

// Handle taps
let singleTap = UITapGestureRecognizer(target: self, action: #selector(doTap))
addGestureRecognizer(singleTap)

// Add SubView
view.insertSubview(SubView, atIndex: 0)
SubView.userInteractionEnabled = false

更新的代碼( doInit是因為所謂的buttonTapped上調用抽頭),但仍無法正常工作:

class CustomButton : UIButton, UIGestureRecognizerDelegate {

    private func doInit() {
        ...
        // Handle taps
        let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(buttonTapped))
        tapRecognizer.delegate = self
        addGestureRecognizer(tapRecognizer)
     }

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
}

SubView仍將接收分接頭,但它將忽略它們,並在此停止。 如果一個視圖的userInteractionEnabled設置為false,它將阻止用於父視圖的觸摸。

我的猜測是您想添加此手勢識別器委托:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool

這將允許您的父視圖與SubView同時接收觸摸。

以Laynemoseley的答案為基礎,這是Apple文檔中的相關內容:

在iOS 6.0及更高版本中,默認控制動作可防止手勢識別器行為重疊。 例如,按鈕的默認操作是單擊。 如果您在按鈕的父視圖上附加了一個單擊手勢識別器,並且用戶點擊了該按鈕,則該按鈕的操作方法將接收觸摸事件,而不是手勢識別器。 這僅適用於與控件的默認操作重疊的手勢識別,其中包括:

單指單擊UIButton,UISwitch,UIStepper,UISegmentedControl和UIPageControl。 用一根手指沿與滑塊平行的方向在UISlider的旋鈕上滑動。 UISwitch的旋鈕上的單指平移手勢,平行於開關的方向。 如果您具有這些控件之一的自定義子類,並且想要更改默認操作,則將手勢識別器直接附加到控件而不是父視圖。 然后,手勢識別器首先接收觸摸事件。 與往常一樣,請務必閱讀iOS人機界面指南,以確保您的應用程序提供直觀的用戶體驗,尤其是在覆蓋標准控件的默認行為時。

似乎唯一的解決方案是覆蓋手勢識別並允許同時手勢被識別。

暫無
暫無

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

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