簡體   English   中英

iPhone:透明處理觸摸

[英]iPhone: Handling touches transparently

我有一個UIViewController並與它關聯一個UIView。 UIView有許多子視圖。

如何處理UIViewController子類中指定矩形內的觸摸事件?

這種處理應該是透明的:即使UIView及其子視圖與指定的矩形相交,也應該接收其觸摸事件。

聚苯乙烯

  1. 覆蓋觸摸開始在視圖控制器中不起作用。 內部視圖不會傳遞事件。
  2. 在UIView子視圖列表的末尾添加自定義按鈕也不起作用。 內部子視圖不接收觸摸事件。

touchesBegan / touchesMoved / touchesEnded可能是要走的路。 根據您要嘗試執行的操作,也可以選擇UIGestureRecognizer。

要確保子視圖向上傳遞事件,請在子視圖上將userInteractionEnabled設置為YES。

UIView默認情況下將其設置為YES,但是某些子類(尤其是UILabel)將其覆蓋並將其設置為NO。

僅僅因為視圖默認情況下不傳遞事件,並不一定意味着它就是這種方式。

您可以將正在使用的視圖子類化,然后讓它們將事件傳遞給視圖控制器。

另一個想法是從字面上看,在所有視圖之上都有一個透明的處理程序。 也就是說,在視圖上方有一個透明的UIView,既可以處理觸摸事件,又可以通過它們。 我不知道這在實踐中是否可行,但聽起來確實如此。

您的視圖及其控制器可以使用touchesBegan,touchesEnded或touchesMoved處理觸摸。 在touchesBegan中,您可以選擇將事件傳遞給響應者鏈中的下一個響應者。 這樣,您的每個視圖都將有機會根據觸摸事件執行某些操作。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //do something here and then pass the event on
    [self.nextResponder touchesBegan:touches withEvent:event]; 
}

暫無
暫無

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

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