天天看點

iOS 當手勢遇上UITableView,會發生哪些奇妙的事?入坑懷疑驗證方案倉庫

入坑

因為項目的一個新需求

遂複用了一個自定義的視圖

這個視圖裡面有一個

UITableView

就在萬事俱備

準備走一波的時候~ 🐥

神奇的事情又發生了~ 😉

清單裡面的

Cell

居然點了沒反應??

Cell

有個點選效果

明白人都清楚

我2隻

大眼睛

👀 都已經看到這個效果了

但是代理函數就是沒響應?

心中一萬隻草泥🐴奔騰而過 ~_ ~_ ~_

令我無法相信的事實是

這個視圖在A處

完全沒有

任何問題

然而此時在B處,卻完全不起任何作用 😉

一毛一樣的代碼

我隻能猜想

于是我開始一點一點排查

半個小時過去了

十萬隻草泥🐴

一個小時過去了

我開始網上查找相似案例

一個半小時過去了

我開始在開發群裡面求助

無數隻草泥🐴

懷疑

我起身去廁所

就是想去廁所冷靜了下

别想歪了

吃翔是解決不了問題的 😉

抛下目前的糾結

閉上眼睛

開始在腦海裡遊蕩

在知識的海洋裡尋找答案

不同之處是應該是它所處的環境造成的

當點選無效時

我腦海裡出現了

手勢沖突

這個概念

很快!

我的猜想得到了驗證

果然是被一個

手勢

攔截了

啊 😉

草泥🐴一波接一波 ~_ ~_ ~_

誰能想到

在某個地方會存在這麼個東西 🐥

驗證

我開始建立了一個項目

開始進一步驗證

先上一張圖

俗話說

“沒圖你說個🐥”

iOS 當手勢遇上UITableView,會發生哪些奇妙的事?入坑懷疑驗證方案倉庫

在控制器ViewController的

view

上添加一個自定義的視圖

aview

這個

aview

有3個子視圖:

backView

backButton

contentView

contentView

有1個子視圖:

tableView

上面的圖已經列出的層級關系

并且個别視圖添加了

手勢

以及

事件

如果上面的圖飛走了

就直接看下面的文字吧

/* 層級結構
 ViewController
 |---view (UIView)                     添加了點選手勢
     |---AView (UIView)                未添加
          |----backView (UIView)       添加了點選手勢
          |----backButton (UIButton)   添加了Target-Action
          |----contentView (UIView)    未添加
                |----tableView (UITableView) 未添加
 
 問題:
 點選 contentView 和 tableViewcell
 最頂層的 view 會響應事件
 */
           

contentView

tableView

未添加手勢

當點選它們的時候

最頂層的

view

的點選事件

響應

是以導緻

cell

點選了也沒反應

之前我嘗試用2個手指點選

cell

居然是有反應的! 震驚 😱

當我點選

aview

時,它也沒有添加手勢

此時,還是最頂層的

view

的點選事件

響應

當我點選

backView

backButton

它們2個的事件都能響應!

于是我在

aview

上添加了手勢

再次點選時,

aview

響應事件了

這個時候再來看

contentView

tableView

當我點選它們2個時,

aview

響應事件了

繼續在

contentView

上添加手勢

此時點選

tableView

contentView

響應事件了

于是有了下面的解決方案之一

結論:

子視圖

的手勢和事件,會覆寫

父視圖

的手勢

但是

父視圖

的手勢,會覆寫

子視圖

UITableViewCell

的事件

UITableViewCell

的事件,怎麼它的等級就這麼低呢 😉

填坑結束

捏了一把汗😓

方案

  • 解決方案1

    給 cell 也添加 點選手勢

  • 解決方案2

    把自定義的視圖添加到目前視圖的

    window

    [self.aview showInView:self.view.window];

這第2個方案是怎麼想到的呢?

也許是代碼寫多了

自然就會了吧 😃

倉庫

你可以自己下載下傳項目,來體驗一番~

https://github.com/xjh093/TapGestureAndUITableView