在UITableViewCell

时间:2015-10-21 01:04:49

标签: ios objective-c uitableview uicollectionview

我有一个内置UICollectionViewCell的UITableViewCell。我希望用户能够滚动UICollectionViewCell但是当他点击UITableViewCell内的任何地方时我需要选择它。目前,当用户在UICollectionViewCell之外点击UITableViewCell时,它被正确选中,但当他点击UICollectionViewCell时,没有任何反应。我的想法是在UITableViewCell中实现collectionView:didSelectItemAtIndexPath:方法并以编程方式触发" self selection",但我似乎找不到这样做的方法。如果我存储对表的引用和单元格内部的indexPath,我可能会这样做,但我觉得这样做是不好的方法。如何正确地做到这一点?

2 个答案:

答案 0 :(得分:1)

我的猜测是UITableViewCell的didSelectRowAtIndexPath:阻塞了UICollectionViewCell的collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:

我首先检查UITableViewCell的didSelectRowAtIndexPath的断点是否是这种情况:选择UICollectionViewCell。

如果是这种情况,这个答案可能会对你有帮助(也有一个很好的教程):https://stackoverflow.com/a/17120673/5465258

我认为他们遇到了类似的问题。

答案 1 :(得分:0)

嗯,我找到了解决方案,但我不知道它是否是最好的。

首先,我在UITapGestureRecognizer内的UICollectionView添加了UITableViewCell,以覆盖组件的-(void)awakeFromNib { ... UITapGestureRecognizer *v_CollectionViewTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onClickCollectionView)]; [self.m_CollectionView addGestureRecognizer:v_CollectionViewTap]; ... }

UIGestureRecognizer

其次,我创建了一个块属性来保存行的编程选择代码,并创建了一个调用此块的方法,将其设置为先前创建的typedef void (^OnClickTableViewCellBlock)(); @property (nonatomic, copy) OnClickTableViewCellBlock m_OnClickBlock; 的操作。

UITableViewCell

最后,当我在tableView:cellForRowAtIndexPath:方法中创建tableview:didSelectRowAtIndexPath:时,我会传递一个调用-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ... v_Cell.m_OnClickBlock = ^void() { [tableView.delegate tableView:tableView didSelectRowAtIndexPath:indexPath]; }; ... } 的块。

<?php 
session_start();
$timeout = 60; // Number of seconds until it times out.

// Check if the timeout field exists.
if(isset($_SESSION['timeout'])) {
    // See if the number of seconds since the last
    // visit is larger than the timeout period.
    $duration = time() - (int)$_SESSION['timeout'];
    if($duration > $timeout) {
        // Destroy the session and restart it.
        session_destroy();
        session_start();
    }
}

// Update the timeout field with the current time.
$_SESSION['timeout'] = time();
?>