iOS 關于cell上的事件傳遞問題

此篇是用來記錄工程開發(fā)過程中遇到的一系列問題的颅停,在以后遇到類似問題還會更新的喲~

第一種

類似微信朋友圈功能,如下圖:


類似微信朋友圈功能

需求分析:整體布局為tableView,每個cell上有0~9張圖片师枣,圖片九宮格布局,點擊圖片放大萧落,點擊除圖片的部分響應cell的點擊事件践美。一般的做法是把放圖片的部分單獨封出來(用collocationView、view都可以)找岖,我用了封View的方法來放這些圖片(上圖中綠色的部分)陨倡。氮素,會有一個問題许布,就是我們要討論的問題兴革,比如圖中顯示的情況,圖片一行排不滿有空缺的地方時蜜唾,點擊是沒有反應的杂曲,原因是因為封出來的這個View攔截了點擊事件(View以外的地方是正常的)。所以我們要做的是讓事件可以穿透這部分空白的區(qū)域袁余,去響應cell的點擊事件擎勘。
解決方法:
1、給collocationView或者View添加手勢颖榜,很笨的方法但是可以解決棚饵,廢話不多說強勢上代碼:

UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tgrTouch)];
tgr.delegate = self;
[self.collectView addGestureRecognizer:tgr];
- (void)tgrTouch{
   //跳轉(zhuǎn)操作
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    // 輸出點擊的view的類名煤裙,則不截獲Touch事件
    NSLog(@"%@", NSStringFromClass([touch.view class]));
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
        // 備注,我的collectionCell上是UIImageView
        if ([NSStringFromClass([touch.view class]) isEqualToString:@"UIImageView"]) {
            return NO;
        }
    }
    return YES;
}

2噪漾、第二種就是重寫點擊事件的響應鏈硼砰,就是hitTest方法。讓事件跳過UICollectionView/View傳遞到tableview的cell欣硼。
使用UICollectionView時题翰,在tableviewCell里添加hitTest方法,代碼如下:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *view = [super hitTest:point withEvent:event];
    if ([view isKindOfClass:[UICollectionView class]]) {
        return self;
    }
    return [super hitTest:point withEvent:event];
    //return self.super;
}

使用View時分别,在View里添加hitTest方法遍愿,代碼如下:

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    UIView *view = [super hitTest:point withEvent:event];
    if (view == self) {
        return self.superview;
    }else
        return view;
}

至此,完美解決耘斩,其主要的思想就是:不想讓某一View響應次事件的時候沼填,通過響應時間連給到View的superView,當然括授,View的subView接受事件時不算View接受坞笙。

第二種

先上圖(原諒我的布局low~ 謝謝~~)


需求分析:整體布局為tableView,每個cell上有N張圖片荚虚,圖片橫向流水線布局薛夜,多圖時可以滑動以顯示后面圖片,點擊響應cell的事件版述。比上面的那種情況多了個可以滑動梯澜,可以用tableView、scrollView來實現(xiàn)渴析。又氮素晚伙,tableView/scrollView又攔截了點擊事件,tableView可以用上面的問題解決俭茧,scrollView貌似就GG了咆疗,scrollView要不響應點擊事件,又要響應滑動事件母债,這個就要涉及到UITouch事件了午磁,區(qū)分一下是點擊還是滑動。OK毡们,用tableView的同學們可以試試上面的方法迅皇,下面重點說用scrollView的方法。
解決方法:
scrollView自身要響應滑動事件衙熔,又要不響應點擊事件喧半。所以得區(qū)分Touch手勢,重寫scrollView自己的UITouch事件青责。上代碼上代碼上代碼:
1挺据、自定義個scrollView,繼承 UIScrollView

// .h文件
#import <UIKit/UIKit.h>
@interface RRTableViewCellScrollView : UIScrollView
@end

// .m文件
#import "RRTableViewCellScrollView.h"
#import "RRTableViewCell.h"
@implementation RRTableViewCellScrollView
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    RRTableViewCell * cell = (RRTableViewCell *)self.superview;
    [cell touchesBegan:touches withEvent:event];
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    RRTableViewCell * cell = (RRTableViewCell *)self.superview;
    [cell touchesEnded:touches withEvent:event];
}
@end

2脖隶、然后tableViewCell里使用這個RRTableViewCellScrollView對象扁耐,正常使用即可,完美解決~

情況結束产阱,以后有類似問題繼續(xù)分享婉称,歡迎同學們來討論O(∩_∩)O~

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市构蹬,隨后出現(xiàn)的幾起案子王暗,更是在濱河造成了極大的恐慌,老刑警劉巖庄敛,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俗壹,死亡現(xiàn)場離奇詭異,居然都是意外死亡藻烤,警方通過查閱死者的電腦和手機绷雏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怖亭,“玉大人涎显,你說我怎么就攤上這事⌒诵桑” “怎么了期吓?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長倾芝。 經(jīng)常有香客問我讨勤,道長,這世上最難降的妖魔是什么蛀醉? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任悬襟,我火速辦了婚禮,結果婚禮上拯刁,老公的妹妹穿的比我還像新娘脊岳。我一直安慰自己,他們只是感情好垛玻,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布割捅。 她就那樣靜靜地躺著,像睡著了一般帚桩。 火紅的嫁衣襯著肌膚如雪亿驾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天账嚎,我揣著相機與錄音莫瞬,去河邊找鬼儡蔓。 笑死,一個胖子當著我的面吹牛疼邀,可吹牛的內(nèi)容都是我干的喂江。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼旁振,長吁一口氣:“原來是場噩夢啊……” “哼获询!你這毒婦竟也來了?” 一聲冷哼從身側響起拐袜,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤吉嚣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蹬铺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尝哆,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年丛塌,在試婚紗的時候發(fā)現(xiàn)自己被綠了较解。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡赴邻,死狀恐怖印衔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姥敛,我是刑警寧澤奸焙,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站彤敛,受9級特大地震影響与帆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜墨榄,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一玄糟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧袄秩,春花似錦阵翎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至背稼,卻和暖如春贰军,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蟹肘。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工词疼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俯树,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓贰盗,卻偏偏與公主長得像聘萨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子童太,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容