我有一个配置了UICollectionView的视图控制器,它定义了一个原型单元并且工作正常。我有一个segue设置,这样如果你点击原型单元格,它将转到一个"计划"查看该特定单元格。这也很有效。
但是我现在想要为原型单元格(或开关)添加一个按钮,该按钮将使用不同的segue转到不同的视图控制器(设置),无论您点击该按钮的是哪个单元格。
我已创建按钮,按住Ctrl并单击并拖动到我想要的视图控制器,创建了segue,所有看起来都很好。但是当我运行应用程序并点击按钮时(无论哪个单元格)都会出现错误:
- [UIButton _layoutAttributes]:无法识别的选择器发送到实例
我无法弄清楚我做错了什么。从上面的描述中有什么明显的东西吗?我可以在必要时发布代码,但是我不知道在这种情况下它会如何帮助,因为所有内容都在故事板上完成了有关segues等的内容。"设置"查看控制器。
一旦点击按钮,甚至在调用prepareForSegue之前,就会出现错误。
答案 0 :(得分:1)
你有一个带按钮的原型单元格,你正在使用该按钮的segue
,这是错误的AFAIK方式。原因我说这是原型单元格不是实际单元格,而是在执行期间创建单元格实例的模板。
这应该如下:
UIButton
SourceController
的segue附加到DestinationController
(既不是来自单元格也不是按钮)-collectionView:cellForItemAtIndexPath:
添加-addTarget:action:forControlEvents:
特定按钮- performSegueWithIdentifier:sender:
操作方法。 修改:-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
}