我创建了一个UICollectionViewCell
by nib 并在其中添加了一个按钮,并创建了一个 .h 和 .m 文件,将类添加到了 nib中。然后file's owner
在通过插座连接它的 .m 中编写了一个按钮操作。
集合视图填充正常,但无法触发按钮操作。我认为收集单元的代表被调用。
我怎样才能获得按钮动作?
我创建了一个UICollectionViewCell
by nib 并在其中添加了一个按钮,并创建了一个 .h 和 .m 文件,将类添加到了 nib中。然后file's owner
在通过插座连接它的 .m 中编写了一个按钮操作。
集合视图填充正常,但无法触发按钮操作。我认为收集单元的代表被调用。
我怎样才能获得按钮动作?
我也有这个问题。没有子视图会接收触摸事件。虽然 Scott K 的解决方法确实有效,但我仍然觉得有问题。所以我又看了看我的笔尖,注意到我用来创建 UICollectionViewCell 的原始子视图是 UIView。即使我将类更改为 UICollectionViewCell 的子类,XCode 仍然认为它是 UIView,因此您看到的 contentView 问题没有捕捉到触摸事件。
为了解决这个问题,我通过确保拖动 UICollectionViewCell 对象并将所有子视图移动到该对象来重做笔尖。之后,触摸事件开始在我的单元格的子视图上起作用。
可以指示您的 nib 是否配置为 UICollectionViewCell 是查看您的高级视图的图标。
如果它看起来不像这样,那么它可能会错误地解释触摸事件。
当您通过 nib 创建UICollectionViewCell
nib 时,nib 的内容不会添加到单元格的 contentView 中——所有内容都会直接添加到UICollectionViewCell
. 似乎没有办法让 Interface Builder 将 nib 中的顶级视图识别为UICollectionViewCell
,因此“自动”内的所有内容都会添加到 contentView 中。
正如 sunkehappy 所指出的,您想要接收触摸事件的任何内容都需要进入 contentView。它已经为您创建好了,所以您能做的最好的事情就是UIButton
在 awakeFromNib 时间以编程方式将您的内容移到 contentView 中。
-(void)awakeFromNib {
[self.contentView addSubview:self.myButton];
}
要配置单元格的外观,请将数据项内容显示为子视图所需的视图添加到 contentView 属性中的视图。不要直接将子视图添加到单元格本身。单元管理多层内容,内容视图只是其中的一层。除了内容视图之外,单元格还管理两个背景视图,这些视图以选定和未选定状态显示单元格。
您可以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");
}
我刚刚通过添加解决了它
[self bringSubviewToFront:myButton];
进入awakeFromNib
我有一个类似的问题,单元格底部的子视图没有收到触摸事件,但顶部工作正常。于是我开始调查,得到以下结果:
将 Interface Builder 中单元格的“自动调整子视图”设置为“是”解决了我的问题!
在 UICollectionViewCell 中为 CollectionView 创建一个句柄
在 UICollectionViewCell 的 .h 文件中
@property (nonataomic, retain) UICollectionView *collView;
在 UICollectionViewCell 的 .m 文件中
@synthesize *collView;
然后在Controller的实现File中的foll Method中设置Collection View
-(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];
}