ios子檢視和父檢視同時處理輸入事件
阿新 • • 發佈:2019-01-28
在使用UITableView巢狀UICollectionView的過程中,
collectionView作為cell,我希望,點選collectionView的讓tableView對應的行也被選中。
如果直接判斷collectionView所在的行,然後設定cell.selected = YES,選中是解決了,但是,
選擇其他的cell的以後,上一個cell的selected的狀態卻沒有變成NO,就這不對了。如果我們自己
處理這個取消選中狀態的操作,也不是什麼麻煩的事情。因為是單選,我們只需記住當前選中的cell,
但這個cell要改變時,先取消其選中狀態,在將它指向當前選擇的cell。
當然,我還可以換一個方法。在collectionView接受使用者觸控的時候,tableView也接受該觸控。
各自處理各自的。
在自定義的collectionView子類中重寫touchBegan、touchMove、touchEnd、touchCancel這四個方法。
可以看到,collectionView的nextResponder是UITableViewCellContentView。
< BookCollectionView.m:(78) > <UITableViewCellContentView: 0x7fe25b84a6d0; frame = (0 0; 320 151.5); opaque = NO; gestureRecognizers = <NSArray: 0x7fe259e578a0>; layer = <CALayer: 0x7fe25b8492d0>>
注意,touch系列的方法需要全部實現,僅僅實現touchBegan會出現一些奇怪的問題。
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會出現一些奇怪的問題。