我有一个集合视图[不是自定义集合视图],我想通过单击按钮来显示警报。但按钮操作不会检测到我的代码的操作:
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [ self.collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
NSArray *sectionArr=[self.ClassesArr objectAtIndex:indexPath.section];
NSDictionary *data = [sectionArr objectAtIndex:indexPath.row];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(54, 25, 15, 15);
[btn addTarget:self action:@selector(subCateBtnAction:) forControlEvents:UIControlEventTouchUpInside];
[cell addSubview:btn];
}
// the button action
-(IBAction)subCateBtnAction:(UIButton *)btn
{
NSArray *sectionArr=[self.ClassesArr objectAtIndex:sectionindex];
NSDictionary *data = [sectionArr objectAtIndex:btn.tag];
NSString *name = [data objectForKey:@"nombreTarifa"];
UIAlertView *Notpermitted=[[UIAlertView alloc] initWithTitle:@""
message:name
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[Notpermitted show];
}
感谢可能是什么问题!
答案 0 :(得分:1)
看起来您没有将按钮添加到单元格或返回单元格,请尝试以下操作:
[cell addSubview:btn];
return cell;
但是你是否意识到UICollectionView有一个委托方法可供选择? collectionView:didSelectItemAtIndexPath:
答案 1 :(得分:1)
哇,你永远不想在你的cellForItemAtIndexPath:
委托方法中添加这样的按钮!创建自定义单元格视图并在其中添加按钮,然后在该代码中创建按钮实例
然后检查是否首先调用了按钮的选择器方法。您可以在其中添加NSLog语句来测试正在调用的方法。此外,您应该使用DidSelectItem
委托方法来检测触摸。您提到当您尝试实现didSelectItem
委托方法时,您的代码崩溃了,这不是避免解决问题并在其他地方实施选择代码的借口。修复你的崩溃并正确实施它。当您尝试实施didSelectItem
委托方法时,请告诉我们崩溃的实际情况,以便我们可以进一步帮助您。
更新1 重新创建您的笔尖并需要以下post中的答案。它指的是您的单元格是hi视图而不是UICOllectionView,这很可能是您的内容视图未接收触摸事件的原因