- [UIButton _layoutAttributes]:发送到实例的无法识别的选择器

时间:2016-08-10 12:49:06

标签: objective-c uicollectionviewcell

我有一个配置了UICollectionView的视图控制器,它定义了一个原型单元并且工作正常。我有一个segue设置,这样如果你点击原型单元格,它将转到一个"计划"查看该特定单元格。这也很有效。

但是我现在想要为原型单元格(或开关)添加一个按钮,该按钮将使用不同的segue转到不同的视图控制器(设置),无论您点击该按钮的是哪个单元格。

我已创建按钮,按住Ctrl并单击并拖动到我想要的视图控制器,创建了segue,所有看起来都很好。但是当我运行应用程序并点击按钮时(无论哪个单元格)都会出现错误:

- [UIButton _layoutAttributes]:无法识别的选择器发送到实例

我无法弄清楚我做错了什么。从上面的描述中有什么明显的东西吗?我可以在必要时发布代码,但是我不知道在这种情况下它会如何帮助,因为所有内容都在故事板上完成了有关segues等的内容。"设置"查看控制器。

一旦点击按钮,甚至在调用prepareForSegue之前,就会出现错误。

1 个答案:

答案 0 :(得分:1)

你有一个带按钮的原型单元格,你正在使用该按钮的segue,这是错误的AFAIK方式。原因我说这是原型单元格不是实际单元格,而是在执行期间创建单元格实例的模板。

这应该如下:

  1. 使用UIButton
  2. 定义原型单元格
  3. SourceController的segue附加到DestinationController(既不是来自单元格也不是按钮)
  4. -collectionView:cellForItemAtIndexPath:添加-addTarget:action:forControlEvents:特定按钮
  5. 处理上述步骤中指定的任何- performSegueWithIdentifier:sender:操作方法。
  6. 修改:-addTarget:action

    UICollectionViewCell子类中声明一个按钮,并将插座连接到原型单元格中的UIButton

    @interface <your custom class here> : UICollectionViewCell
    @property (weak, nonatomic) IBOutlet UIButton *buttonOnCell; //<-- Connect outlet to prototype cell.
    
    @end
    

    在出列单元格后的-collectionView:cellForItemAtIndexPath:中添加以下行:

    [cell.buttonOnCell addTarget:self action:@selector(actionOnButton:) forControlEvents:UIControlEventTouchUpInside];
        return cell;
    

    在viewController中定义一个方法,如下所示:

    - (void)actionOnButton:(UIButton*)button
    {
        // your code here depending on the button pressed
    }