Swift UITableViewCell子视图不注册tap

时间:2016-10-19 08:43:04

标签: swift uitableview uicollectionview uitapgesturerecognizer

背景:我制作日历,为此我将UITableView和UICollectionViews结合起来。 UITableView持有月份单元格。每个月UITableViewCell都会持有一个UICollectionView,其中包含UICollectionViewCell天。

问题: UICollectionViewCells无法点击。 我可以通过在月UITableViewCell中调用self.bringSubviewToFront(self.collectionView)来解决这个问题。但是这会使UITableView无法滚动,因为collectionView现在是顶视图。

因此,我可以选择能够滚动UITableView还是能够单击UICollectionView。

我尝试了什么:我尝试在发生之前捕获点击并将collectionView置于前面,然后再将其重新放回。虽然不是一个好的解决方案:

//In UITableViewCell class

//UIGestureRecognizerDelegate
//Bring collectionView to front before tap
override func gestureRecognizer(gestureRecognizer: UIGestureRecognizer,  shouldReceiveTouch touch: UITouch) -> Bool {
    self.bringSubviewToFront(self.collectionView)
    return true
}

//UIScrollViewDelegate
//Bring collectionView to back again
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    self.sendSubviewToBack(self.collectionView)
    //Do stuff
}

问题:如何才能实现滚动并让UICollectionView可点击而无需在点击之间返回和转发视图?有没有办法让UICollectionView在前面并仍然使UITableView可滚动?

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

具有相同滚动指示的嵌套UIScrollView违反了Apple的人机界面指南,您的应用甚至可能会被拒绝,因此请尝试禁用UICollectionView的滚动。

希望这有帮助。