入坑
因為項目的一個新需求
遂複用了一個自定義的視圖
這個視圖裡面有一個
UITableView
就在萬事俱備
準備走一波的時候~ 🐥
神奇的事情又發生了~ 😉
清單裡面的
Cell
居然點了沒反應??
Cell
有個點選效果
明白人都清楚
我2隻
大眼睛
👀 都已經看到這個效果了
但是代理函數就是沒響應?
心中一萬隻草泥🐴奔騰而過 ~_ ~_ ~_
令我無法相信的事實是
這個視圖在A處
完全沒有
任何問題
然而此時在B處,卻完全不起任何作用 😉
一毛一樣的代碼
我隻能猜想
于是我開始一點一點排查
…
半個小時過去了
十萬隻草泥🐴
…
一個小時過去了
我開始網上查找相似案例
…
一個半小時過去了
我開始在開發群裡面求助
…
無數隻草泥🐴
懷疑
我起身去廁所
就是想去廁所冷靜了下
别想歪了
吃翔是解決不了問題的 😉
抛下目前的糾結
閉上眼睛
開始在腦海裡遊蕩
在知識的海洋裡尋找答案
不同之處是應該是它所處的環境造成的
當點選無效時
我腦海裡出現了
手勢沖突
這個概念
很快!
我的猜想得到了驗證
果然是被一個
手勢
攔截了
啊 😉
草泥🐴一波接一波 ~_ ~_ ~_
誰能想到
在某個地方會存在這麼個東西 🐥
驗證
我開始建立了一個項目
開始進一步驗證
先上一張圖
俗話說
“沒圖你說個🐥”
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP31UNBRUYxh2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLxkjMwEDO1AjM2ITMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
在控制器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