1. 程式人生 > >ios子檢視和父檢視同時處理輸入事件

ios子檢視和父檢視同時處理輸入事件

在使用UITableView巢狀UICollectionView的過程中,
collectionView作為cell,我希望,點選collectionView的讓tableView對應的行也被選中。
如果直接判斷collectionView所在的行,然後設定cell.selected = YES,選中是解決了,但是,
選擇其他的cell的以後,上一個cell的selected的狀態卻沒有變成NO,就這不對了。如果我們自己
處理這個取消選中狀態的操作,也不是什麼麻煩的事情。因為是單選,我們只需記住當前選中的cell,
但這個cell要改變時,先取消其選中狀態,在將它指向當前選擇的cell。


當然,我還可以換一個方法。在collectionView接受使用者觸控的時候,tableView也接受該觸控。
各自處理各自的。


在自定義的collectionView子類中重寫touchBegan、touchMove、touchEnd、touchCancel這四個方法。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    
    [self.nextResponder touchesBegan:touches withEvent:event];
    [super touchesBegan:touches withEvent:event];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.nextResponder touchesMoved:touches withEvent:event];
    [super touchesMoved:touches withEvent:event];
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.nextResponder touchesEnded:touches withEvent:event];
    [super touchesEnded:touches withEvent:event];
}

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.nextResponder touchesCancelled:touches withEvent:event];
    [super touchesCancelled:touches withEvent:event];
}




可以看到,collectionView的nextResponder是UITableViewCellContentView。
< BookCollectionView.m:(78) > <UITableViewCellContentView: 0x7fe25b84a6d0; frame = (0 0; 320 151.5); opaque = NO; gestureRecognizers = <NSArray: 0x7fe259e578a0>; layer = <CALayer: 0x7fe25b8492d0>>
注意,touch系列的方法需要全部實現,僅僅實現touchBegan會出現一些奇怪的問題。