无法检测按钮动作集合视图

时间:2014-01-19 20:30:34

标签: ios button uicollectionview buttonclick

我有一个集合视图[不是自定义集合视图],我想通过单击按钮来显示警报。但按钮操作不会检测到我的代码的操作:

    -(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];

    }

感谢可能是什么问题!

2 个答案:

答案 0 :(得分:1)

看起来您没有将按钮添加到单元格或返回单元格,请尝试以下操作:

[cell addSubview:btn];
return cell;

但是你是否意识到UICollectionView有一个委托方法可供选择? collectionView:didSelectItemAtIndexPath:

答案 1 :(得分:1)

哇,你永远不想在你的cellForItemAtIndexPath:委托方法中添加这样的按钮!创建自定义单元格视图并在其中添加按钮,然后在该代码中创建按钮实例

然后检查是否首先调用了按钮的选择器方法。您可以在其中添加NSLog语句来测试正在调用的方法。此外,您应该使用DidSelectItem委托方法来检测触摸。您提到当您尝试实现didSelectItem委托方法时,您的代码崩溃了,这不是避免解决问题并在其他地方实施选择代码的借口。修复你的崩溃并正确实施它。当您尝试实施didSelectItem委托方法时,请告诉我们崩溃的实际情况,以便我们可以进一步帮助您。

更新1 重新创建您的笔尖并需要以下post中的答案。它指的是您的单元格是hi视图而不是UICOllectionView,这很可能是您的内容视图未接收触摸事件的原因