取得按钮动作:UICollectionView细胞(Getting button action :

2019-07-04 16:40发布

我创建了一个UICollectionViewCell通过笔尖和里面添加一个按钮,并创建了一个h和.m文件添加类碎粒file's owner 。然后在.M写了一个按钮动作经由出口连接它。

集合视图填充罚款​​,但不能得到布敦动作触发。 我想收集细胞的委托调用。

我怎样才能按钮操作?

Answer 1:

我有这个问题为好。 无子视图会接收触摸事件。 虽然斯科特·K公司的变通办法工作,我还是觉得有些不对劲。 于是我又看看我的笔尖,并注意到我用来创建一个UICollectionViewCell原来子视图是一个UIView。 虽然我改变了类UICollectionViewCell的子类时,Xcode仍然认为这是一个UIView,因此您的问题与内容查看不要再追触摸事件看。

为了解决这个问题,我通过确保拖动UICollectionViewCell对象,将所有的子视图到重做笔尖。 之后,触摸事件开始在我的单元格的子视图工作。

能指标看,如果你的笔尖被配置为UICollectionViewCell是看你的高层视图的图标。

如果它看起来并不像这一点,那么它可能会解释触摸事件错误。



Answer 2:

当你创建一个UICollectionViewCell通过笔尖笔尖的内容不会添加到该单元的内容查看-这一切又直接添加到UICollectionViewCell 。 似乎没有成为一个办法让Interface Builder来识别笔尖的顶级视图UICollectionViewCell ,因此,所有里面的内容“自动”被添加到内容查看。

作为sunkehappy指出,要接收触摸事件有什么需要进入内容查看。 它已经为您创建的,所以你能做的最好的就是以编程方式将您UIButton成awakeFromNib时的内容查看。

-(void)awakeFromNib {
    [self.contentView addSubview:self.myButton];
}


Answer 3:

UICollectionViewCell类参考

要配置您的单元格的外观,添加到目前的数据项的内容子视图的内容查看属性视图所需要的意见。 不要直接添加子视图电池本身。 小区管理的内容,其中内容视图只有一个多层。 除了内容视图,电池管理被显示在它的选中和未选中状态的细胞两个背景视图。

您可以在添加按钮awakeFromNib这样的:

- (void)awakeFromNib
{
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
    [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    [self.contentView addSubview:button];
}

- (void)buttonClicked:(id)sender
{
    NSLog(@"button clicked");
}


Answer 4:

我刚刚与添加解决它

[self bringSubviewToFront:myButton];

awakeFromNib



Answer 5:

我也有类似的问题,即在电池的底部子视图没有收到触摸事件,但顶部是工作的罚款。 所以我已经开始调查,并得到了以下结果:

  • 接口生成器将增加你在它创建于细胞的内容查看电池的任何子视图,即使内容查看本身是不是在界面生成器可见
  • 我的代码扩展的细胞,以适应内容的大小,所以多数在集合视图的细胞是较大的高度比在Interface Builder蓝图
  • 出于某种原因,“自动调整子视图”细胞本身的属性被设置为NO。 这引起了神秘和不可见的接口建设者的细胞在Interface Builder原本内容查看,以保持相同的尺寸,所以是那样的内容查看的范围之外的任何子视图没有收到接触和反应迟钝

设置单元格的“自动调整子视图”在Interface Builder为YES解决我的问题!



Answer 6:

我觉得很难理解接受的答案,我会尽量给出一个简单的答案。

在UICollectionViewCell有两种类型。

  1. 集查看电池
  2. 收集可重复使用的视图

我所使用的收集可重复使用的视图,在该按钮操作不工作。

然后按接受的答案我试图用集合查看单元格中,只有按钮操作的工作。 使用所述第二对象在图像。 它将很好地工作。



Answer 7:

为的CollectionView在UICollectionViewCell创建一个句柄

在UICollectionViewCell的.h文件

@property (nonataomic, retain) UICollectionView *collView;

在UICollectionViewCell的.m文件

@synthesize *collView;

然后在FOLL法控制器的实现文件设置的集合视图

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
  YourCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:homePageCollViewCellIdentifier forIndexPath:indexPath];
    //NSString *str = [NSString stringWithFormat:@"HP item %d", indexPath.row+1];
    cell.collView = self.theCollectionView;
}

现在,在您UICollectionViewCell实施

- (void)awakeFromNib
{
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
    [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    [self.contentView addSubview:button];
}

现在,在您的按钮点击的方法

-(void)buttonClicked:(id)sender
{
    NSLog(@"button clicked");
    NSIndexPath *indPath = [collVw indexPathForCell:self];    
    [collVw.delegate collectionView:self.collVw didSelectItemAtIndexPath:indPath];
}


文章来源: Getting button action : UICollectionView Cell